一、聚合查詢基礎概念
ES 聚合查詢是一種統計、分組和過濾數據的方式,通過對文檔中的欄位進行聚合操作,實現對數據的統計分析。在 ES 中,聚合查詢主要有以下幾個概念:
- 聚合:對文檔中的某個欄位進行統計、分組、計算等操作的過程。
- 桶:用於分組的虛擬容器,可以是基於文檔中的某個欄位進行分組,也可以是基於一些特定的聚合維度進行分組。
- 指標:用於計算結果的統計指標,例如平均值、最大值、最小值等。
- 聚合嵌套:在一個聚合中嵌套另一個聚合,形成多層聚合。
二、聚合查詢類型
1. 桶型聚合
桶型聚合是將文檔按照某個欄位進行分組,把相同值的文檔放入同一個桶中,然後對桶中的文檔進行統計、計算等操作。ES 中的桶型聚合包括以下幾種:
- terms:按照欄位的值進行分組。
- date_histogram:按照日期(或時間)進行分組。
- histogram:按照數字範圍進行分組。
- range:按照指定的範圍進行分組。
- ip_range:按照 IP 地址範圍進行分組。
- geo_distance:按照地理位置範圍進行分組。
- filter:按照指定條件進行過濾後再進行分組。
2. 指標型聚合
指標型聚合是對文檔中某個欄位進行統計、計算等操作,得出指定的統計指標。ES 中的指標型聚合包括以下幾種:
- avg:求平均值。
- max:求最大值。
- min:求最小值。
- sum:求和。
- cardinality:求基數(不重複的數量)。
- stats:同時求平均值、最大值、最小值、和、數量等指標。
3. 嵌套型聚合
嵌套型聚合是在一個聚合中嵌套另一個聚合,形成多層聚合。ES 中的嵌套型聚合可以任意組合,形成複雜的聚合查詢。
三、聚合查詢代碼示例
1. 桶型聚合示例
{ "aggs": { "group_by_color": { "terms": { "field": "color" } } } }
以上代碼實現了按照 color 欄位進行分組,並返回每個分組的文檔數量和文檔列表。
2. 指標型聚合示例
{ "aggs": { "group_by_price": { "avg": { "field": "price" } } } }
以上代碼實現了求 price 欄位的平均值,並返回統計結果。
3. 嵌套型聚合示例
{ "aggs": { "group_by_color": { "terms": { "field": "color" }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } }
以上代碼實現了先按照 color 欄位分組,然後對每個分組求 price 欄位的平均值,並返回統計結果。
四、總結
ES 聚合查詢是一種非常強大的數據聚合分析工具,通過選擇不同的聚合類型可以實現各種複雜的統計計算。在實際應用中,需要根據業務需求選擇合適的聚合類型,合理設計聚合查詢語句,從而得到有效的統計結果。
原創文章,作者:OZGCP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/371972.html