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