聚合(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 聚合流程