2016-12-09 1 views
0

elasticsearchで検索操作を実行するとき、メタデータをフィルタリングして、応答に「_source」のみを戻したいとします。私は、次のように "検索" を通じて同じことを達成することができるよ:elasticisearchクライアントでhelpers.scanを使用したfilter_pathの使用

OUT1 = es.search(インデックス= 'index.com'、filter_path = [ 'hits.hits._id'、 " hits.hits._source '])

しかし、私は、スキャン方式と同じことを行うとき、それはちょうど空のリストを返します。

OUT2 = helpers.scan(ES、クエリ、インデックス=' インデックス.com '、 doc_type =' 2016-07-27 '、filter_path = [' hits.hits._source ']

問題は私が 'scan'メソッドのレスポンスを処理しているか、filter_pathに値を渡している方法で発生する可能性があります。出力を調べるために、out2をリストに解析します。

答えて

1

現在、scanヘルパーではscroll APIに余分なパラメータを渡すことはできませんので、filter_pathは適用されません。ただし、scan/scrollサイクルを開始するために使用される最初のsearch API呼び出しに適用されます。つまり、scroll_idが応答から削除され、操作全体が失敗することになります。でもscroll APIコールにfilter_pathパラメータを渡すあなたの場合

は、ヘルパーは、応答の構造に依存しているため、この操作はまた、仕事とするために必要とされるscroll_idを取り除くになるので、ヘルパーが失敗する原因となります。

レスポンスのサイズを制限する必要がある場合はsource filteringを、小さい場合はsizeパラメータをデフォルトの1000より小さくすることをお勧めします。

・ホープこれはあなたがそれを動作させるためにスキャンヘルパーにfilter_path=['_scroll_id', '_shards', 'hits.hits._source']を渡すことができ、 Honza

0

に役立ちます。明らかに、応答にはいくつかのメタデータが残っていますが、scrollを有効にしながら可能な限り削除します。スキャンヘルパーによって内部的に使用されるため、_shardsが必要です。

関連する問題