在 elastisearch 客户端中将 filter_path 与 helpers.scan 一起使用

Jai*_*rma 5 elasticsearch elasticsearch-py

在 elasticsearch 中进行搜索操作时,我希望过滤掉元数据并在响应中仅返回“_source”。我可以通过以下方式通过“搜索”实现相同的目标:

out1 = es.search(index='index.com', filter_path=['hits.hits._id', 'hits.hits._source'])

但是当我用 scan 方法做同样的事情时,它只返回一个空列表:

out2 = helpers.scan(es, query, index='index.com', doc_type='2016-07-27',filter_path= ['hits.hits._source'])

问题可能与我处理“扫描”方法响应的方式有关,或者与我将值传递给 filter_path 的方式有关。为了检查输出,我将 out2 解析为一个列表。

Hon*_*rál 6

该scan帮助器当前不允许将额外参数传递给scrollAPI,因此您的参数filter_path不适用于它。但是,它确实会应用于search用于启动scan/scroll循环的初始 API 调用。这意味着scroll_id从响应中删除 会导致整个操作失败。

在您的情况下,即使将filter_path参数传递给scrollAPI 调用也会导致帮助程序失败,因为它会删除scroll_id此操作工作所需的参数,而且还因为帮助程序依赖于响应的结构。

如果您需要限制响应的大小或使用比默认参数更小的参数,我的建议是使用源过滤。size1000

希望这有帮助,洪扎


小智 5

您可以传递filter_path=['_scroll_id', '_shards', 'hits.hits._source']给扫描助手以使其正常工作。显然,这会在响应中留下一些元数据,但它会在允许正常工作的同时删除尽可能多的元数据scroll。_shards是必需的,因为它由扫描助手内部使用。