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

ElasticSearch:单查询实现嵌套数组空值与指定值检索

单个Elasticsearch查询实现多条件检索需求

文档结构

{
  "hits": [
    {
      "_type": "_doc",
      "_id": "ef0a2c44179a513476b080cc2a585d95",
      "_source": {
        "DIVISION_NUMBER": 44,
        "MATCHES": [
          {
            "MATCH_STATUS": "APPROVED",
            "UPDATED_ON": 1599171303000
          }
        ]
      }
    },
    {
      "_type": "_doc",
      "_id": "ef0a2c44179a513476b080cc2a585d95",
      "_source": {
        "DIVISION_NUMBER": 44,
        "MATCHES": [ ]
      }
    }
  ]
}

需求说明

MATCHES为嵌套数组,内部包含文本字段MATCH_STATUS(可选值如"APPROVED"、"REJECTED"等)。需要用单个Elasticsearch查询检索满足以下任一条件的文档:

  • MATCHES数组中存在MATCH_STATUS为"APPROVED"或"RECOMMENDED"的元素;
  • MATCHES为空数组(即"MATCHES": [ ])。

合并后的单个查询

通过bool查询的should子句组合两个条件,实现逻辑“或”的关系:

{
  "size": 5000,
  "from": 0,
  "query": {
    "bool": {
      "should": [
        // 条件1:匹配MATCHES数组中含指定状态的文档
        {
          "nested": {
            "path": "MATCHES",
            "query": {
              "terms": {
                "MATCHES.MATCH_STATUS.keyword": [
                  "APPROVED",
                  "RECOMMENDED"
                ]
              }
            }
          }
        },
        // 条件2:匹配MATCHES为空数组的文档
        {
          "bool": {
            "must_not": [
              {
                "nested": {
                  "path": "MATCHES",
                  "query": {
                    "exists": {
                      "field": "MATCHES"
                    }
                  }
                }
              }
            ]
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

查询解释

  • should子句:包含两个待匹配条件,满足其中一个即可返回文档;
  • minimum_should_match: 1:显式声明需至少满足一个should条件(无must/filter时默认值为1,显式写更清晰);
  • 第一个should分支:用nested查询穿透嵌套数组,匹配状态符合要求的文档;
  • 第二个should分支:通过must_not + nested exists组合,筛选出MATCHES为空数组的文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:35:20