Link Search Menu Expand Document Documentation Menu

求和聚合

sum 聚合是一种单值指标聚合,它计算从所有匹配文档中的字段提取的数值总和。此聚合通常用于计算收入、数量或持续时间等指标的总计。

参数

sum 聚合支持以下参数。

参数 数据类型 描述
field 字符串 要聚合的字段。必须是数值字段。
script(脚本) 对象 用于计算聚合自定义值的脚本。可以代替 field 或与 field 一起使用。
missing 数字 目标字段缺失的文档使用的默认值。

示例

以下示例演示如何计算物流索引中记录的交付物的总重量。

创建索引

PUT /deliveries
{
  "mappings": {
    "properties": {
      "shipment_id": { "type": "keyword" },
      "weight_kg": { "type": "double" }
    }
  }
}

添加示例文档

POST /deliveries/_bulk?refresh=true
{"index": {}}
{"shipment_id": "S001", "weight_kg": 12.5}
{"index": {}}
{"shipment_id": "S002", "weight_kg": 7.8}
{"index": {}}
{"shipment_id": "S003", "weight_kg": 15.0}
{"index": {}}
{"shipment_id": "S004", "weight_kg": 10.3}

以下请求计算 deliveries 索引中所有文档的总重量,通过将 size 设置为 0 来省略文档命中,并返回 weight_kg 的总和。

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "total_weight": {
      "sum": {
        "field": "weight_kg"
      }
    }
  }
}

响应包含值 45.6,对应于 12.5 + 7.8 + 15.0 + 10.3 的总和。

{
  ...
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "total_weight": {
      "value": 45.6
    }
  }
}

使用脚本计算值

您可以提供一个脚本来计算聚合值,而不是直接指定字段。当值需要派生或调整时,这会很有用。

在以下示例中,每个重量在使用脚本求和之前从千克转换为克。

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "total_weight_grams": {
      "sum": {
        "script": {
          "source": "doc['weight_kg'].value * 1000"
        }
      }
    }
  }
}

响应包含 total_weight_grams45600

{
  ...
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "total_weight_grams": {
      "value": 45600
    }
  }
}

将字段与值脚本结合使用

您还可以同时指定 fieldscript,使用特殊变量 _value 来引用字段的值。当对现有字段值应用转换时,这会很有用。

以下示例在求和之前将所有重量增加 10%。

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "adjusted_weight": {
      "sum": {
        "field": "weight_kg",
        "script": {
          "source": "Math.round(_value * 110) / 100.0"
        }
      }
    }
  }
}

响应反映了在原始总重量上增加了 10%。

{
  ...
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "adjusted_weight": {
      "value": 50.16
    }
  }
}

缺失值

默认情况下,缺少目标字段的文档将被忽略。若要使用默认值包含它们,请使用 missing 参数。

以下示例将默认值 0 分配给缺失的 weight_kg 字段。这确保了没有此字段的文档被视为 weight_kg 设置为 0 并包含在聚合中。

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "total_weight_with_missing": {
      "sum": {
        "field": "weight_kg",
        "missing": 0
      }
    }
  }
}

剩余 350 字符

有问题?

想要贡献?