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

Elasticsearch二级嵌套聚合按城市过滤:统计班加罗尔各实验室测试量

Elasticsearch 按城市统计实验室测试数量问题

文档结构

{
  "_index": "my_index",
  "_type": "_doc",
  "_id": "1296",
  "_version": 1,
  "_seq_no": 431,
  "_primary_term": 1,
  "_routing": "1296",
  "found": true,
  "_source": {
    "id": 1296,
    "test_name": "abc",
    "test_id": 513,
    "inventory_arr": [
      {
        "city": "bangalore",
        "after_tat": 168,
        "before_tat": 54,
        "popularity_score": 15,
        "rank": 0,
        "discounted_price": 710,
        "labs": [
          {
            "lab_id": 395,
            "lab_name": "Prednalytics Laboratory",
            "lab_rating": 34
          },
          {
            "lab_id": 363,
            "lab_name": "Neuberg Diagnostics",
            "lab_rating": 408
          }
        ]
      },
      {
        "city": "mumbai",
        "after_tat": 168,
        "before_tat": 54,
        "popularity_score": 15,
        "rank": 0,
        "discounted_price": 710,
        "labs": [
          {
            "lab_id": 395,
            "lab_name": "Prednalytics Laboratory",
            "lab_rating": 34
          },
          {
            "lab_id": 380,
            "lab_name": "Neuberg Diagnostics",
            "lab_rating": 408
          }
        ]
      }
    ]
  }
}

需求与问题

需要统计**班加罗尔(bangalore)**地区每个实验室执行的测试数量,当前使用普通嵌套聚合按lab_id分组时,会把所有城市的实验室合并统计,无法区分城市。单条文档下期望结果:

[{"key": 395, "doc_count": 1},{"key": 363, "doc_count": 1}]

解决方案

利用多层嵌套聚合+过滤实现精准统计,DSL查询如下:

{
  "size": 0,
  "aggs": {
    "enter_inventory": {
      "nested": {
        "path": "inventory_arr"
      },
      "aggs": {
        "filter_bangalore": {
          "filter": {
            "term": {
              "inventory_arr.city": "bangalore"
            }
          },
          "aggs": {
            "enter_labs": {
              "nested": {
                "path": "inventory_arr.labs"
              },
              "aggs": {
                "group_by_lab_id": {
                  "terms": {
                    "field": "inventory_arr.labs.lab_id"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

逻辑说明

  1. 第一层nested聚合进入inventory_arr层级,遍历每个城市的库存条目
  2. 用filter组件筛选出城市为bangalore的条目
  3. 第二层nested聚合进入筛选后条目的labs层级,遍历该城市下的所有实验室
  4. 最后通过terms聚合按lab_id分组,统计每个实验室的测试记录数

结果结构

返回结果中,aggregations.enter_inventory.filter_bangalore.enter_labs.group_by_lab_id.buckets即为期望的统计数据,格式与需求一致。

内容的提问来源于stack exchange,提问作者Sachin Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:31:03