在前面我們提到了幾種query,可以幫助查找相關的文檔
不論是單一的leaf query去執行特定範圍
或是透過compound query執行複雜的條件搜尋
目的主要都是查找出我們要的特定文檔
但是如果我們是想要針對我們的資料做一些數據分析呢?
這時就可以使用aggregation進行處理
例如找出特定欄位的平均值
或是找出哪些產品銷量最好等等
在ES中aggregation可以分成3種:
Metric aggregation:
GET /test_aggregation/_search
{
"size": 0, //不管有多少文檔匹配 只在意聚合結果
"aggs": { // 宣告使用aggregation query
"total": {
"sum": { // 定義使用的agg方法
"field": "total_amount" // 目標欄位
}
},
"avg": {
"avg": {
"field": "total_amount"
}
},
"min": {
"min": {
"field": "total_amount"
}
},
"max": {
"max": {
"field": "total_amount"
}
}
}
}
// 返回結果
"aggregations": {
"total": {
"value": 1000
},
"min": {
"value": 10
},
"avg": {
"value": 11
},
"max": {
"value": 100
}
此外還有其他方法,因為真的太多了所以我這邊只挑其中一些說明
aggregation方法 | 類型 | 功能 |
---|---|---|
cardinality | single-value | 計算欄位有多少種值,也就是非重複的數有多少。但是只是近似值,不是絕對精確 |
value_count | single-value | 計算欄位總共有多少筆資料,不會考慮到有無重複 |
stats | multi-value | 會直接計算出該欄位的min, max, sum, count |
boxplot | multi-value | 四分位數,返回min, max, q1, q2, q3以及lower跟upper |
extended_stats | multi-value | stats的延伸,返回更多數據分析結果,如標準差等等 |
這邊特別提及一下t-test,簡而言之就是判斷兩組數據有沒有顯著差異
{
"t_test": {
"a": "value_before",
"b": "value_after",
"type": "paired"
}
}
"t_test": {
"a": {
"field": "",
"filter": {
"term": {"": ""}
}
},
"b": {
"field": "",
"filter": {
"term": {"": ""}
}
},
"type": "heteroscedastic"
}
Bucket aggregations:
這邊介紹其中2種用法:terms與range(object相關的明天介紹)
terms:
{
...
"aggregations": {
"genres": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "electronic",
"doc_count": 6
},
{
"key": "rock",
"doc_count": 3
},
{
"key": "jazz",
"doc_count": 2
}
]
}
}
}
GET /_search
{
"aggs": {
"genres": {
"terms": {
"field": "genre",
"order": { "max_play_count": "desc" }
},
"aggs": {
"max_play_count": { "max": { "field": "play_count" } }
}
}
}
}
range:
"range": {
"field": "",
"ranges": [
{"to": 100}, {"from": 100, "to": 200}, {"from": 200}
// to是 <
// from則是 >=
]
}
今天就先介紹這兩種aggregations方法
metric aggregation幫助我們在分析我們的資料時
除了一般的數據計算外,也能處理統計分析等形式
讓我們更深入了解我們資料彼此之間的關係
並且也能透過bucket aggregation去藉由不同條件來將資料進行分組
明天會介紹pipeline aggregation
並且會介紹aggregation使用上時,可以設定的其他參數跟其他需要注意的細節與~
參考資料
aggregation:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html
metric aggregation:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics.html
bucket aggregation:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket.html
terms aggregation:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#terms-agg-doc-count-error