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

如何在Elasticsearch中查询不含指定匹配嵌套对象的文档?

Elasticsearch 查询满足条件的文档

针对你需要筛选「不含SR_Middle_Name对象,或该对象值不为Aron」的文档需求,我们可以通过nested查询结合bool逻辑来实现——因为details是数组类型,Elasticsearch默认会扁平化存储数组内的对象,只有用nested查询才能正确关联数组中每个对象的id和value字段。

完整查询语句

{
  "query": {
    "bool": {
      "should": [
        {
          "must_not": {
            "nested": {
              "path": "details",
              "query": {
                "term": {
                  "details.id": {
                    "value": "SR_Middle_Name"
                  }
                }
              }
            }
          }
        },
        {
          "nested": {
            "path": "details",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "details.id": "SR_Middle_Name"
                    }
                  },
                  {
                    "bool": {
                      "must_not": {
                        "term": {
                          "details.value": "Aron"
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

逻辑拆解

  • 第一个should条件:通过must_not + nested查询,确保文档中完全不存在id为SR_Middle_Name的对象。
  • 第二个should条件:先匹配存在id为SR_Middle_Name的对象,再通过must_not排除该对象value等于Aron的情况。
  • minimum_should_match: 1:表示只要满足两个条件中的任意一个,文档就会被命中。

注意事项

如果你的details字段还没有设置为nested类型,需要先更新字段映射,否则上述查询无法正确工作。示例映射如下:

{
  "mappings": {
    "properties": {
      "details": {
        "type": "nested",
        "properties": {
          "id": { "type": "keyword" },
          "value": { "type": "keyword" }
        }
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者Юра Вусач

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:27:33