1

Elasticsearch-py (es バージョンは 2.3) を使用しており、俳優、監督、ジャンル、プロット、タイトル、年などのマッピングを使用して、インデックス内のすべてのドキュメントから「タイトル」フィールドのみを返したいと考えています。

私は現在試し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}

さまざまなバージョンのフィルター パスとソース フィールド リストを試しましたが、うまくいきません。

4

3 に答える 3

4

以下を使用してソース フィルタリングを適用できます。

messages = es.search(index="movies", _source=["title"])

ただし、応答を解析する必要があります。このために、次のようなことができます:

titles = [hit["title"] for hit in messages["hits"]["hits"]["_source"]]]

Elasticsearch-py API には (私の知る限り)、Elasticsearch から得られるやや冗長な応答を平坦化するものは何もありません。

于 2016-11-29T16:56:12.577 に答える