Elasticsearch如何实现数组字段多值匹配的AND条件过滤查询
Elasticsearch 数组多值同时匹配查询修改方案
你原来的terms查询默认是或逻辑,只要数组包含任意一个匹配值就会返回,要实现同时包含多个值的与逻辑,可以用以下两种方案:
方案1:bool + 多term查询(全版本通用,兼容性最好)
直接在bool查询的must子句中,为每个要求匹配的值各写一个term查询,所有条件同时满足才会返回结果:
{ "query": { "bool": { "must": [ {"term": {"CLASS": 1}}, {"term": {"CLASS": 10}} ] } } }
注意:你的文档字段名为大写的
CLASS,原查询中写的小写class无法匹配到对应字段,需要注意字段大小写和文档保持一致。
方案2:terms_set 查询(适用于Elasticsearch 7.10及以上版本)
如果需要匹配的值较多,不想重复写多个term,可以用terms_set查询,指定最小匹配数等于要匹配的值的总个数即可:
{ "query": { "terms_set": { "CLASS": { "terms": [1, 10], "minimum_should_match_script": { "source": "2" } } } } }
以上两种方案都会返回你预期的同时包含1和10的两条文档。
内容的提问来源于stack exchange,提问作者khairul
相关产品推荐
相关产品推荐

