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

Elasticsearch:如何在采样聚合中对桶的_count值执行除法运算?

解决Elasticsearch聚合中对每个Category桶计数做除法运算的问题

你的代码核心问题是bucket_script聚合的位置错误——它需要作为categories(terms聚合)的子聚合存在,而非与categories同级。只有这样,bucket_script才能访问每个terms桶的_count值,实现逐个桶的除法运算。

如果需要将固定除数作为可配置参数(而非硬编码在脚本里),可以通过params字段定义,让脚本更灵活。

修正后的聚合代码

"aggs": {
    "test": {
      "sampler": {
        "shard_size": 1000
      },
      "aggs": {
        "categories": {
          "terms": {
            "field": "category",
            "size": 150
          },
          "aggs": {
            "bucketresults": {
              "bucket_script": {
                "buckets_path": {
                  "value_number": "_count"
                },
                "params": {
                  "divisor": 100  // 可配置的除数参数
                },
                "script": "params.value_number / params.divisor"
              }
            }
          }
        }
      }
    }
  }

关键细节说明

  • 把bucketresults移到categories的子聚合中,确保它能遍历每个category桶,对当前桶的_count执行计算。
  • 通过params字段定义除数,后续修改数值时只需调整该参数,无需改动脚本逻辑。
  • buckets_path直接写_count,因为此时处于单个terms桶的上下文,可直接访问当前桶的计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:40:46