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