我正在使用elasticsearch-py(ES版本为2.3),并想从索引中的所有文档中返回所有文档的'title'字段:演员,导演,导演,流派,,情节,标题,年。
我目前正在尝试messages = es.search(index="movies", _source=['hits.hits.title'])
,结果响应是:
{u'hits': {u'hits': [{u'_score': 1.0, u'_type': u'movie', u'_id': u'tt0116996', u'_source': {}, u'_index': u'movies'}, {u'_score': 1.0, u'_type': u'movie', u'_id': u'1', u'_source': {}, u'_index': u'movies'}], u'total': 2, u'max_score': 1.0}, u'_shards': {u'successful': 1, u'failed': 0, u'total': 1}, u'took': 2, u'timed_out': False}
我尝试了不同版本的过滤路径和源字段列表,但似乎无法正确处理。
您可以使用:
应用源过滤messages = es.search(index="movies", _source=["title"])
但是您仍然需要解析响应。为此,您可以做类似的事情:
titles = [hit["title"] for hit in messages["hits"]["hits"]["_source"]]]
Elasticsearch-Py API中没有什么(据我所知)会使您从Elasticsearch获得的相当详细的响应降低。
您现在可以在搜索功能中使用 _source_exclued
和 _source_include
kwargs来限制返回哪些字段。
所以类似:
messages = es.search(index="movies", _source=["title"], _source_include=['title'])
我也有类似的问题,这就是我解决的问题。我需要在不同的上下文中 - 我必须在循环稍后使用有关标题的信息:
res = es.search(index="movies", body={"query": {"match_all": {}}})
for hit in res['hits']['hits']:
title = hit['_source'].get('title')