我正在使用elasticsearch-py(es版本是2.3)并且想要从索引中的所有文档返回'title'字段,其中包含:actors,director,genre,plot,title,year。
我目前正在尝试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}
我尝试过不同版本的过滤器路径和源字段列表,但似乎无法正确使用。
答案 0 :(得分:0)
您可以将源过滤应用于:
messages = es.search(index="movies", _source=["title"])
但您仍需要解析响应。为此,您可以执行以下操作:
titles = [hit["title"] for hit in messages["hits"]["hits"]["_source"]]]
在elasticsearch-py API(据我所知)中没有任何内容可以平衡你从Elasticsearch获得的相当冗长的响应。
答案 1 :(得分:0)
现在,您可以在搜索功能中使用_source_exclued
和_source_include
kwargs来限制返回的字段。
类似于:
messages = es.search(index="movies", _source=["title"], _source_include=['title'])
答案 2 :(得分:0)
我有类似的问题,这就是我解决它的方法。我需要它在一个不同的上下文中 - 我不得不在循环中使用有关标题的信息:
res = es.search(index="movies", body={"query": {"match_all": {}}})
for hit in res['hits']['hits']:
title = hit['_source'].get('title')