分析與彙總結果
Elasticsearch聚合使您能夠獲取有關搜索結果的元信息,並回答諸如“德克薩斯州有多少個帳戶持有人”之類的問題。或“田納西州的平均帳戶餘額是多少?” 您可以在一個請求中搜索文檔,過濾命中並使用匯總分析結果。
例如,以下請求使用terms
彙總將bank
索引中的所有帳戶按狀態分組,並按降序返回帳戶數量最多的十個州:
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword"
}
}
}
}
buckets
在相應中是state字段的值。該 doc_count
顯示的是每個州帳戶數量。例如,您可以看到ID
(愛達荷州)有27個帳戶。因爲請求中設置size=0
,所以響應僅包含聚合結果。
{
"took": 29,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped" : 0,
"failed": 0
},
"hits" : {
"total" : {
"value": 1000,
"relation": "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"group_by_state" : {
"doc_count_error_upper_bound": 20,
"sum_other_doc_count": 770,
"buckets" : [ {
"key" : "ID",
"doc_count" : 27
}, {
"key" : "TX",
"doc_count" : 27
}, {
"key" : "AL",
"doc_count" : 25
}, {
"key" : "MD",
"doc_count" : 25
}, {
"key" : "TN",
"doc_count" : 23
}, {
"key" : "MA",
"doc_count" : 21
}, {
"key" : "NC",
"doc_count" : 21
}, {
"key" : "ND",
"doc_count" : 21
}, {
"key" : "ME",
"doc_count" : 20
}, {
"key" : "MO",
"doc_count" : 20
} ]
}
}
}
您可以組合聚合以構建更復雜的數據彙總。例如,以下請求將avg
聚合嵌套在先前的 group_by_state
聚合中,以計算每個狀態的平均帳戶餘額。
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword"
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
您可以通過指定terms
聚合內的順序來使用嵌套聚合的結果進行排序,而不是按計數對結果進行排序:
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"order": {
"average_balance": "desc"
}
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
除了這些基本的存儲桶和指標聚合外,Elasticsearch還提供了專門的聚合,用於在多個字段上操作並分析特定類型的數據,例如日期,IP地址和地理數據。您還可以將單個聚合的結果反饋到管道聚合中,以進行進一步分析。
聚合提供的核心分析功能可啓用高級功能,例如使用機器學習來檢測異常。