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

如何在Elasticsearch中计算各device_type占总数的百分比?

解决方案

要计算每个device_type对应的占比(当前设备类型文档数与总文档数的比值),你需要调整聚合结构,让bucket_script能同时获取到单设备分组的数量和全局总数。具体实现如下:

修改后的查询语句:

GET some_index/_search
{
  "size": 0,
  "aggs": {
    "total": {
      "value_count": {
        "field": "_id"
      }
    },
    "per_device": {
      "terms": {
        "field": "device_type",
        "size": 10
      },
      "aggs": {
        "device_count": {
          "value_count": {
            "field": "_id"
          }
        },
        "device_ratio": {
          "bucket_script": {
            "buckets_path": {
              "deviceTotal": "device_count",
              "globalTotal": "total"
            },
            "script": "params.deviceTotal / params.globalTotal"
          }
        }
      }
    }
  }
}

核心逻辑说明

  • 顶级聚合total负责统计所有文档的总数
  • 在per_device的terms分组内,先通过device_count统计当前设备类型的文档数量
  • 最后用bucket_script聚合,通过buckets_path分别引用单设备数量和全局总数,脚本内完成除法运算得到比值;如果需要百分比结果,可把脚本改成(params.deviceTotal / params.globalTotal) * 100

内容的提问来源于stack exchange,提问作者Mehdi.Valizade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:34:50