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

Elasticsearch 如何对nested嵌套字段的聚合结果进行过滤

问题根因
  • 顶层nested查询仅过滤符合条件的根文档,不会过滤根文档下的其他嵌套子文档。只要某条根文档存在至少一个info.type_group_id=2的子文档,该根文档的所有info嵌套子文档都会进入聚合流程,导致统计结果出现非预期值。
  • 聚合结构层级错误:你在nested聚合下先执行了未过滤的terms聚合,直接统计了所有info子文档的type_id,后续添加的filter逻辑层级错位,没有作用到terms聚合上。
  • 上下文使用错误:reverse_nested操作会跳出嵌套上下文回到根文档维度,根文档不存在info.type_id字段,因此后续的inner_docs聚合无法拿到正确的嵌套字段值。
修正后的查询
{
  "from": 0,
  "size": 0,
  "_source": {
    "excludes": ["*"]
  },
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "info",
            "query": {
              "term": {
                "info.type_group_id": 2
              }
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "info_nested": {
      "nested": {
        "path": "info"
      },
      "aggs": {
        "filter_valid_group": {
          "filter": {
            "term": {
              "info.type_group_id": 2
            }
          },
          "aggs": {
            "agg_by_type_id": {
              "terms": {
                "field": "info.type_id",
                "size": 10000
              }
            }
          }
        }
      }
    }
  }
}
逻辑说明
  • 首先通过nested聚合进入info嵌套字段上下文,所有子聚合的操作对象都是info子文档
  • 执行filter聚合,仅保留info.type_group_id=2的子文档,排除同根文档下其他不符合条件的嵌套子文档
  • 最后对过滤后的子文档执行terms聚合统计type_id,结果不会出现非预期值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:05