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

如何在Elasticsearch中组合嵌套结构的term与range查询

Elasticsearch Nested类型多条件组合查询

因为Elasticsearch的nested字段中每个嵌套对象都是独立存储的,要同时匹配多个嵌套项的条件,必须在bool查询的must数组中分别定义对应的nested查询,确保两个条件分别命中不同的嵌套子文档,且所在的根文档同时满足这两个要求。

以下是符合需求的查询语句:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "doc_flat",
            "query": {
              "bool": {
                "must": [
                  {"term": {"doc_flat.key": "status"}},
                  {"term": {"doc_flat.value_string": "warning"}}
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "doc_flat",
            "query": {
              "bool": {
                "must": [
                  {"term": {"doc_flat.key": "timestamp"}},
                  {"range": {"doc_flat.value_date": {
                    "gte": "2024-01-01T00:00:00Z",
                    "lte": "2024-01-31T23:59:59Z"
                  }}}
                ]
              }
            }
          }
        }
      ]
    }
  }
}

关键说明:

  • 每个nested查询指定path: "doc_flat",明确针对该嵌套字段进行查询
  • 外层bool.must确保两个嵌套查询的条件同时成立(根文档必须同时包含符合第一个条件的嵌套项,以及符合第二个条件的嵌套项)
  • 每个嵌套内部的bool.must保证单个嵌套项同时匹配key和对应的值条件(比如key=status且value_string=warning)

如果需要调整日期范围,直接修改range中的gte和lte参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:20:40