Elasticsearch多字段匹配加状态过滤查询match报错如何解决
错误原因
match查询不支持直接传入数组作为匹配值,你在status字段下传入了["-wip"]数组,直接触发语法解析报错。- 需求为
status字段不包含-wip,你当前写在filter节点下的查询是匹配包含-wip的记录,逻辑完全相反,需要放到bool查询的must_not节点下实现排除逻辑。
正确查询语句
如果是要匹配status字段中不出现-wip关键词的记录,写法如下:
GET items/_search { "query": { "bool": { "must": { "multi_match": { "fields": [ "name", "description" ], "query": "refrigerator" } }, "must_not": { "match": { "status": "-wip" } } } } }
如果你的status是精确值存储的keyword类型(或存在keyword子字段),使用term查询性能更优:
GET items/_search { "query": { "bool": { "must": { "multi_match": { "fields": [ "name", "description" ], "query": "refrigerator" } }, "must_not": { "term": { "status.keyword": "-wip" } } } } }
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

