OpenSearch数组元素查询:如何匹配多关键词交集
OpenSearch数组关键词同时匹配查询解决方案
问题分析
你的查询不生效的核心原因是:bool的must字段需要是数组类型,但你写成了单个对象,JSON解析时会自动覆盖重复的match键,最终实际执行的只有最后一个match查询(即仅匹配foo),所以无法筛选出同时包含foo和bar的文档。
正确查询写法
方法1:使用bool+must数组(通用方案)
将两个match查询放入must数组中,确保两个条件同时满足:
"query": { "bool": { "must": [ { "match": { "keywords": "bar" } }, { "match": { "keywords": "foo" } } ] } }
方法2:使用term查询(适用于keywords为keyword类型)
如果你的keywords字段定义的是keyword类型(精确匹配场景),用term查询会更高效:
"query": { "bool": { "must": [ { "term": { "keywords": "bar" } }, { "term": { "keywords": "foo" } } ] } }
验证逻辑
这两种写法都会要求文档的keywords数组同时包含foo和bar,仅包含其中一个的文档会被排除,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Teakwood J Overclutch
相关产品推荐
相关产品推荐

