如何在Elasticsearch 6中结合multi_match与两个布尔过滤器
正确实现多条件过滤+带评分的multi_match查询(Elasticsearch 6)
这问题我之前也踩过坑!你出错的核心原因是对Elasticsearch bool查询的filter用法理解错了:不需要用and来组合多个过滤条件——filter参数本身就支持接收一个条件数组,数组里的所有条件默认就是AND逻辑,会同时要求满足。
你之前写的and查询写法不符合ES 6的语法规范,所以才会抛出解析错误。正确的写法应该是直接把多个过滤条件放在filter的数组里,像这样:
{ "query": { "bool": { "must": { "multi_match": { "query": "ny gammal", "fields": ["title", "description^1.4"], "type": "cross_fields" } }, "filter": [ { "range": { "modelYear": {"gte": "2017"} } }, { "term": { "location": "Kumla" } } ] } } }
关键说明:
must里的multi_match会正常计算文档的相关性评分,这部分和你之前的写法一致。filter数组里的两个条件(range和term)会自动以AND逻辑组合,只有同时满足modelYear >= 2017和location == 'Kumla'的文档才会被保留,而且过滤操作不会影响评分(这也是filter的优势之一)。- Elasticsearch 6及以后的版本都支持这种写法,完全符合语法规范。
内容的提问来源于stack exchange,提问作者Sahand
相关产品推荐
相关产品推荐

