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

Elasticsearch 7.x 多层AND/OR嵌套组合条件查询实现方法

Elasticsearch 7.x 对应SQL的DSL查询语句
POST /<你的索引名>/_search
{
  "query": {
    "bool": {
      "should": [
        // 对应 (clm1 IN ('A','B') AND (clm2 IN ('C','D') OR clm3 IN ('E','F'))) 逻辑
        {
          "bool": {
            "must": [
              {
                "terms": {
                  "clm1": ["A", "B"]
                }
              },
              {
                "bool": {
                  "should": [
                    {
                      "terms": {
                        "clm2": ["C", "D"]
                      }
                    },
                    {
                      "terms": {
                        "clm3": ["E", "F"]
                      }
                    }
                  ],
                  "minimum_should_match": 1
                }
              }
            ]
          }
        },
        // 对应 clm4 = 'Z' 逻辑
        {
          "term": {
            "clm4": "Z"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

逻辑对应说明

  • terms 查询等价于SQL的 IN 语法,匹配字段值属于给定数组范围的文档
  • bool.must 对应SQL的 AND 逻辑,数组内所有查询条件都需要满足
  • bool.should 对应SQL的 OR 逻辑,配合 minimum_should_match: 1 表示数组内至少满足1个查询条件
  • 外层bool.should包含两个大分支,对应原SQL最外层的OR逻辑,只要满足其中一个分支即可命中

注意事项

  • 请将代码中的 <你的索引名> 替换为你实际使用的ES索引名称
  • 如果查询的字段为text类型且配置了keyword子字段,需要在字段名后加.keyword后缀(如clm1.keyword),避免分词导致匹配结果不符合预期
  • 如果clm4为text类型,需要将term查询替换为match查询:
{
  "match": {
    "clm4": "Z"
  }
}

内容的提问来源于stack exchange,提问作者fajri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:36:08