【问题标题】:Usage of filter_path with helpers.scan in elastisearch client在 elasticsearch 客户端中使用 filter_path 和 helpers.scan
【发布时间】:2017-06-08 03:54:27
【问题描述】:

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

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

但是当我对扫描方法执行相同操作时,它只会返回一个空列表:

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

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

【问题讨论】:

  • 在您的问题中找到了我的答案,对此问题表示支持,谢谢!!

标签: elasticsearch elasticsearch-py


【解决方案1】:

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

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

如果您需要限制响应的大小或使用比默认的1000 更小的size 参数,我的建议是使用source filtering

希望这会有所帮助, 洪萨

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 2017-05-11
      • 2015-02-19
      相关资源
      最近更新 更多