6

在弹性搜索中执行搜索操作时,我希望过滤掉元数据并在响应中仅返回“_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 解析为一个列表。

4

2 回答 2

5

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

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

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

希望这会有所帮助, Honza

于 2016-12-15T04:55:14.860 回答
4

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

于 2017-06-07T19:54:27.520 回答