> 技术文档 > ElasticSearch 聚合之聚合的分类_elasticsearch的聚合类型有哪些

ElasticSearch 聚合之聚合的分类_elasticsearch的聚合类型有哪些


文章目录

    • 一、聚合功能概述
      • 1. 聚合的作用
      • 2. 三大聚合类型
    • 二、桶聚合(Bucket Aggregations)
      • 1. 核心特征
      • 2. 常用类型
        • (1) Terms 聚合
        • (2) Date Histogram 聚合
    • 三、度量聚合(Metric Aggregations)
      • 1. 核心特征
      • 2. 常用类型
    • 四、管道聚合(Pipeline Aggregations)
      • 1. 核心特征
      • 2. 常见应用
    • 五、聚合字段要求
      • 1. 字段类型限制
      • 2. 错误示例分析
    • 六、聚合组合应用案例
      • 需求场景
      • DSL 实现
      • 响应结果示例
    • 七、学习路径建议

一、聚合功能概述

1. 聚合的作用

  • 对海量文档数据进行统计分析和运算
  • 类比关系型数据库中的聚合函数(如 COUNT/AVG/SUM),但功能更强大

2. 三大聚合类型

聚合类型 类比 SQL 核心作用 常见场景 桶聚合 GROUP BY + 分组统计 文档分组 按品牌/地区/时间区间分组 度量聚合 聚合函数(AVG/MAX) 数值统计计算 计算销售额/平均价格 管道聚合 嵌套聚合查询 对前序聚合结果进行二次处理 求各组平均值的最大值

注意:参与聚合的字段必须是 Keyword、数值、日期、布尔的类型字段

二、桶聚合(Bucket Aggregations)

1. 核心特征

  • 将文档划分到不同组(称为\"桶\")
  • 支持嵌套其他聚合(组内再聚合)

2. 常用类型

(1) Terms 聚合
  • 作用:按字段值分组(类似 SQL 的 GROUP BY
  • 示例
{ \"aggs\": { \"brand_groups\": { \"terms\": { \"field\": \"brand.keyword\", \"size\": 10 } } }}
  • 典型应用:统计各品牌商品数量
(2) Date Histogram 聚合
  • 作用:按时间区间自动分组
  • 示例(按月分组):
{ \"aggs\": { \"sales_by_month\": { \"date_histogram\": { \"field\": \"order_date\", \"calendar_interval\": \"month\" } } }}
  • 典型应用:统计每月销售额

三、度量聚合(Metric Aggregations)

1. 核心特征

  • 对数值型字段进行数学计算
  • 常与桶聚合结合使用(先分组后计算)

2. 常用类型

聚合类型 功能描述 示例值(结果) avg 平均值 平均价格:¥299 max / min 最大值/最小值 最高温度:38℃ sum 求和 总销售额:¥1,200,000 stats 综合统计(含计数/平均值/最大/最小/和) 包含所有基础统计指标

四、管道聚合(Pipeline Aggregations)

1. 核心特征

  • 对前序聚合结果进行二次处理
  • 支持多级管道嵌套

2. 常见应用

  • 求分组平均值的最大值(Max of Avg)
  • 计算同比/环比增长率
  • 排序聚合结果

五、聚合字段要求

1. 字段类型限制

  • 只能使用 不可分词 的字段类型:
    • keyword
    • 数值类型(integer/long/double 等)
    • 日期类型(date)
    • 布尔类型(boolean)

2. 错误示例分析

\"terms\": { \"field\": \"product_name\" // 错误!text 类型默认分词}

正确做法:使用 .keyword 子字段

\"terms\": { \"field\": \"product_name.keyword\"}

六、聚合组合应用案例

需求场景

统计各品牌手机的平均价格和最高价格

DSL 实现

GET /phones/_search{ \"size\": 0, \"aggs\": { \"brand_groups\": { \"terms\": { \"field\": \"brand.keyword\" }, \"aggs\": { \"avg_price\": { \"avg\": { \"field\": \"price\" } }, \"max_price\": { \"max\": { \"field\": \"price\" } } } } }}

响应结果示例

\"aggregations\": { \"brand_groups\": { \"buckets\": [ { \"key\": \"Apple\", \"avg_price\": { \"value\": 6999 }, \"max_price\": { \"value\": 12999 } }, { \"key\": \"Xiaomi\", \"avg_price\": { \"value\": 2999 }, \"max_price\": { \"value\": 5999 } } ] }}

七、学习路径建议

  1. 先掌握基础桶聚合(terms/date_histogram)
  2. 结合度量聚合实现分组统计
  3. 最后学习管道聚合处理复杂场景
  4. 实战中注意字段类型是否符合聚合要求