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

Elasticsearch中如何对type为1或2的桶执行Sum Bucket聚合?

解决方案:仅计算指定type桶的my_sum总和

没问题!这在Elasticsearch里完全可以实现,给你两种实用的方案,根据你的具体场景来选择:

方案1:直接限定分桶的type值(简洁高效)

如果不需要保留其他type的分桶,只需要计算type=1和type=2的总和,最直接的方式是在terms聚合中通过include参数限定只生成目标type的桶,后续的sum_bucket就会自动只对这些桶的my_sum求和。

修改后的聚合语句如下:

{
  "aggs": {
    "types": {
      "terms": {
        "field": "type",
        "include": [1, 2] // 若type是字符串类型,改为["1", "2"]
      },
      "aggs": {
        "my_sum": {
          "sum": {
            "field": "price"
          }
        }
      }
    },
    "filtered_total_sum": {
      "sum_bucket": {
        "buckets_path": "types.my_sum"
      }
    }
  }
}

说明

  • include参数会过滤terms聚合的结果,只保留key为1和2的桶
  • 后续的sum_bucket会直接对这些过滤后的桶的my_sum值求和,完全符合你的需求
  • 注意匹配type字段的数据类型:数值类型用[1,2],字符串类型用["1","2"]

方案2:保留全部分桶,同时计算目标type的总和(灵活场景)

如果需要保留所有type的分桶数据,同时额外计算type=1和type=2的总和,可以结合bucket_script和sum_bucket的过滤功能实现:

{
  "aggs": {
    "types": {
      "terms": {
        "field": "type"
      },
      "aggs": {
        "my_sum": {
          "sum": {
            "field": "price"
          }
        },
        // 标记当前桶是否为目标type
        "is_target_type": {
          "bucket_script": {
            "script": "params.key == 1 || params.key == 2",
            "params": {
              "key": "_key"
            }
          }
        }
      }
    },
    // 仅对标记为目标type的桶求和
    "filtered_total_sum": {
      "sum_bucket": {
        "buckets_path": "types.my_sum",
        "gap_policy": "skip",
        "filter": {
          "bucket_selector": {
            "buckets_path": {
              "isTarget": "types.is_target_type"
            },
            "script": "params.isTarget"
          }
        }
      }
    }
  }
}

说明

  • 先通过bucket_script给每个桶添加一个标记字段is_target_type,判断当前桶的key是否为1或2
  • 再在sum_bucket中通过filter参数,只选择is_target_type为true的桶进行求和
  • 这种方式既保留了所有type的分桶数据,又能得到目标type的总和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:33