Elasticsearch 系列专题 - 第四篇:聚合分析
聚合(Aggregation)是 Elasticsearch 的强大功能之一,允许你对数据进行分组、统计和分析。本篇将从基础到高级逐步讲解聚合的使用,并结合实际案例展示其应用。
1. 聚合基础
1.1 什么是聚合(Aggregation)?
聚合是对文档集合的统计分析,类似于 SQL 中的 GROUP BY
和聚合函数(如 SUM
、AVG
)。Elasticsearch 提供两类聚合:
- Metric 聚合:计算数值统计(如平均值、总和)。
- Bucket 聚合:将文档分组(如按字段值、范围)。
1.2 Metric 聚合(求和、平均值等)
计算单个字段的统计信息。示例:
GET /my_index/_search
{
"aggs": {
"by_views": {
"sum": { "field": "views" }
}
}
}
返回:
{
"aggregations": {
"by_views": {
"value": 1500
}
}
}
常用 Metric 聚合:
avg
:平均值。min
/max
:最小/最大值。stats
:综合统计(包括 min、max、avg 等)。
1.3 Bucket 聚合(分组、范围等)
将文档按条件分组。示例:
GET /my_index/_search
{
"aggs": {
"by_author": {
"terms": { "field": "author.keyword" }
}
}
}
返回:
{
"aggregations": {
"by_author": {
"buckets": [
{
"key": "Grok", "doc_count": 10 },
{
"key": "Alice", "doc_count": 5 }
]
}
}
}
常用 Bucket 聚合:
terms
:按字段值分组。range
:按数值范围分组。date_histogram
:按时间间隔分组。
Mermaid 图示 - Bucket 聚合流程