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

时间:2016-12-09 06:08:30

标签: elasticsearch elasticsearch-py

在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解析为列表。

2 个答案:

答案 0 :(得分:2)

scan帮助程序目前不允许将额外参数传递给scroll API,因此filter_path不适用于此search。但是,它会应用于初始scan/scroll API调用,该调用用于启动scroll_id周期。这意味着filter_path将从响应中剥离,导致整个操作失败。

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

如果您需要限制响应的大小或使用比默认1000更小的class Helper: NSObject { class func addBlurView(_ inView : UIView) -> UIVisualEffectView { let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark) let blurEffectView = UIVisualEffectView(effect: blurEffect) //always fill the view blurEffectView.frame = inView.bounds blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight] blurEffectView.alpha = 0.5 return blurEffectView } } 参数,我的建议是使用source filtering

希望这有帮助, 洪扎

答案 1 :(得分:2)

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