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

ElasticSearch查询:筛选仅含指定状态的嵌套数组记录

ElasticSearch 查询仅包含特定状态的嵌套数组记录

要实现仅返回submittedJobs数组中**所有元素状态均为"PendingPM"**的文档,需要结合嵌套查询的正向匹配与反向排除逻辑,具体方案如下:

解决方案查询

{
  "query": {
    "bool": {
      "filter": [
        // 确保文档至少包含一条状态为PendingPM的提交记录
        {
          "nested": {
            "path": "submittedJobs",
            "query": {
              "term": {
                "submittedJobs.status.keyword": "pendingpm"
              }
            }
          }
        }
      ],
      "must_not": [
        // 排除包含任何非PendingPM状态的文档
        {
          "nested": {
            "path": "submittedJobs",
            "query": {
              "bool": {
                "must_not": [
                  {
                    "term": {
                      "submittedJobs.status.keyword": "pendingpm"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

关键逻辑说明

  1. 正向匹配:通过filter中的嵌套查询,确保文档至少存在一条状态为PendingPM的提交记录(对应需求中数组非空且全为目标状态的前提)。
  2. 反向排除:通过must_not中的嵌套查询,彻底排除任何包含非PendingPM状态提交记录的文档——只要数组里有一个元素状态不符合,整个文档就会被过滤掉。

注意事项

根据字段映射,submittedJobs.status.keyword使用了lowercase_normalizer,意味着存储时状态值会被转成小写,因此查询时必须使用小写的"pendingpm"才能匹配成功,否则会出现匹配不到的情况。

结果验证

  • 示例中的document #2,所有submittedJobs元素的状态均为PendingPM,会被正常返回;
  • document #1包含PendingClient状态的元素,会被must_not条件排除,不会出现在结果中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:06:42