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
相关产品推荐
相关产品推荐

