在 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
是必需的,因为它由扫描助手在内部使用。
在 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
是必需的,因为它由扫描助手在内部使用。