2016-12-09 166 views
0

在elasticsearch中執行搜索操作時,我希望元數據被過濾掉,並在響應中只返回「_source」。我可以通過以下方式實現通過 「搜索」 是相同的:在彈性客戶端客戶端中使用帶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'])

這個問題可能與我處理「掃描」方法的響應方式或我將值傳遞給filter_path的方式有關。要檢查輸出,我將out2解析爲一個列表。

回答

1

scan幫助程序目前不允許將其他參數傳遞到scroll API,因此您的filter_path不適用於它。但是,它確實適用於初始的search API調用,該調用用於啓動scan/scroll週期。這意味着從響應中刪除了scroll_id,導致整個操作失敗。

在你的情況下,即使經過filter_path參數到scroll API調用會導致幫手失敗,因爲它會剝奪了這種操作的工作,還因爲幫手依賴於反應的結構,這是需要的scroll_id

如果您需要限制響應的大小或使用比默認的1000更小的size參數,我的建議是使用source filtering

希望這有助於 洪扎

0

你可以通過filter_path=['_scroll_id', '_shards', 'hits.hits._source']到掃描助手來得到它的工作。顯然,在響應中留下了一些元數據,但在允許scroll工作的同時儘可能多地刪除。 _shards是必需的,因爲它由掃描助手內部使用。