You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:48:02