Elasticsearch 7.14配置双过滤器的constant_score查询报错如何解决
错误原因
constant_score查询仅支持单个filter参数,你直接传入filters数组不符合语法要求,是触发unexpected token [START_ARRAY]报错的直接原因- Elasticsearch 5.x版本后就废弃了
and、or、not这类专用布尔过滤器,7.14版本已经完全移除了相关语法支持,所以使用and组合条件会直接报错
正确查询实现
你需要在constant_score的filter参数内嵌套bool查询,通过bool.filter来包裹多个逻辑与的过滤条件,写法如下:
{ "query": { "constant_score": { "filter": { "bool": { "filter": [ {"exists": {"field": "_geopoint"}}, {"term": {"project_id": "123"}} ] } }, "boost": 1.0 } } }
说明
bool.filter内的多个条件默认是逻辑与的关系,完全符合你需要同时匹配两个过滤规则的需求- 所有过滤条件都运行在过滤上下文,不会计算相关性得分,最终所有匹配文档的得分都固定为
boost参数的值,默认值为1.0,可根据需求自定义调整 - 注意JSON语法不支持数组/对象最后一个元素末尾加多余的逗号,编写查询时需要删除这类无效符号避免语法解析错误
内容的提问来源于stack exchange,提问作者QLands - Carlos Quiros
相关产品推荐
相关产品推荐

