You need to enable JavaScript to run this app. Elasticsearch中bucket_script聚合无返回,如何修改请求计算成功率
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch中bucket_script聚合无返回,如何修改请求计算成功率

问题原因
  • 你在bucket_script中指定的buckets_path路径错误:total和success都是terms聚合类型,返回结构是包含多个桶的buckets数组,没有顶层的doc_count字段,ES无法读取到对应数值,因此没有输出成功率字段。
  • 现有聚合存在冗余设计:不需要嵌套多层terms聚合统计总数和成功数,可大幅简化。
修复后的搜索请求
{
    "size": 0,
    "_source": false,
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "action": "login"
                    }
                }
            ]
        }
    },
    "aggs": {
        "action_bucket": {
            "terms": {
                "field": "action",
                "show_term_doc_count_error": true
            },
            "aggs": {
                "success_count": {
                    "filter": {
                        "term": {
                            "success": true
                        }
                    }
                },
                "action_success_rate": {
                    "bucket_script": {
                        "buckets_path": {
                            "no_total": "_count",
                            "no_success": "success_count._count"
                        },
                        "script": "params.no_total == 0 ? 0 : 100 * params.no_success / params.no_total",
                        "gap_policy": "skip"
                    }
                }
            }
        }
    }
}
修改说明
  • 去掉了冗余的total terms聚合:terms桶本身的_count就是当前action的总请求数,直接通过_count即可读取
  • 简化了成功数统计逻辑:仅保留filter聚合success_count,其本身的_count就是成功请求的数量,不需要再嵌套terms聚合
  • 修正了buckets_path路径,直接读取聚合返回的count数值
  • 脚本中增加了分母为0的判断,避免总请求数为0时出现算术异常
  • 增加gap_policy配置,遇到空值时直接跳过避免报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 00:06:05