在 elasticsearch 客户端中使用 filter_path 和 helpers.scan

Usage of filter_path with helpers.scan in elastisearch client

在 elasticsearch 中执行搜索操作时,我希望元数据被过滤掉并且 return 响应中只有“_source”。我可以通过 "search" 通过以下方式实现相同的目的:

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

但是当我用扫描方法做同样的事情时,它只是 return 一个空列表:

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

问题可能出在我处理 'scan' 方法响应的方式或我将值传递给 filter_path 的方式。为了检查输出,我将 out2 解析为一个列表。

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

在您的情况下,即使将 filter_path 参数传递给 scroll API 调用也会导致助手失败,因为它会去除 scroll_id 所需的此操作之所以有效,还因为助手依赖于响应的结构。

如果您需要限制响应的大小或使用比默认 1000.

更小的 size 参数,我的建议是使用 source filtering

希望这对您有所帮助, 本座

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