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

Elasticsearch聚合如何为bucket各key设置阈值过滤不符合条件的结果

解决方案

在现有聚合逻辑的基础上,新增bucket_selector管道聚合,通过painless脚本为不同服务配置对应阈值判断规则,不符合条件的桶会被直接过滤,不会出现在返回结果中。

修改后的完整聚合语句

"aggs": {
  "group_by_service": {
    "terms": {
      "field": "ServiceName.keyword",
      "size": 1000 // 可根据实际服务数量调整,避免遗漏服务
    },
    "aggs": {
      "group_by_count": {
        "value_count": {
          "field": "ServiceName.keyword"
        }
      },
      "group_by_success": {
        "filter": {
          "term": {
            "ResponseCode": "000"
          }
        },
        "aggs": {
          "group_by_count_succ": {
            "value_count": {
              "field": "ServiceName.keyword"
            }
          }
        }
      },
      "success_percent": {
        "bucket_script": {
          "buckets_path": {
            "numbersucess": "group_by_success>group_by_count_succ",
            "totalRequests": "group_by_count"
          },
          "script": "params.numbersucess / params.totalRequests * 100",
          "format": "0.00"
        }
      },
      // 新增阈值过滤聚合
      "filter_by_threshold": {
        "bucket_selector": {
          "buckets_path": {
            "succ_rate": "success_percent.value"
          },
          "script": """
            // 配置每个服务对应的成功率阈值
            def thresholds = [
              "AAA": 80,
              "BBB": 90
              // 新增其他服务阈值直接在此处添加键值对即可
            ];
            // 获取当前桶对应的服务名
            def serviceName = _key;
            // 可自定义未配置服务的默认阈值,示例默认要求成功率≥95
            def threshold = thresholds.getOrDefault(serviceName, 95);
            // 符合阈值条件的桶保留,不符合则移除
            return params.succ_rate >= threshold;
          """
        }
      }
    }
  }
}

逻辑说明

  • bucket_selector是Elasticsearch原生提供的管道聚合能力,专门用于对聚合生成的桶做条件过滤,无需在查询后二次处理结果,直接返回符合要求的服务数据。
  • 脚本中的_key是terms聚合每个桶的内置变量,对应ServiceName的值,不需要额外配置即可直接调用。
  • 若需要过滤掉所有未在thresholds中配置的服务,将getOrDefault的默认值改为101即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:03