ElasticSearch 聚合之聚合的分类_elasticsearch的聚合类型有哪些
文章目录
一、聚合功能概述
1. 聚合的作用
- 对海量文档数据进行统计分析和运算
- 类比关系型数据库中的聚合函数(如
COUNT
/AVG
/SUM
),但功能更强大
2. 三大聚合类型
注意:参与聚合的字段必须是 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
max
/ min
sum
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 } } ] }}
七、学习路径建议
- 先掌握基础桶聚合(terms/date_histogram)
- 结合度量聚合实现分组统计
- 最后学习管道聚合处理复杂场景
- 实战中注意字段类型是否符合聚合要求