Elasticsearch 匯總聚合功能使得你可以獲得搜索結(jié)果的元數(shù)據(jù),比如“有多少賬戶持有者是在得克薩斯的?”或者“青年賬戶的平均余額是多少?”。 你可以在一個請求里完成搜索文檔,過濾,使用聚合分析結(jié)果的功能。
例如,下面這個請求通過terms聚合來講所有bank索引中的賬戶按照state來進(jìn)行分組,并且按照降序的方式來現(xiàn)實(shí)賬戶最多的10個states。
GET /bank/_search
{
"size": 0
, "aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"size": 10
}
}
}
}
在應(yīng)答數(shù)據(jù)中buckets節(jié)點(diǎn)下是state的域值。 doc_count顯示的是每個state下的賬戶數(shù)。 比如,你可以看到在ID(Idaho)有27個賬戶。由于請求中size=0,所以返回的數(shù)據(jù)中只包含聚合的結(jié)果。
{
"took" : 205,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1000,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"group_by_state" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 743,
"buckets" : [
{
"key" : "TX",
"doc_count" : 30
},
{
"key" : "MD",
"doc_count" : 28
},
{
"key" : "ID",
"doc_count" : 27
},
{
"key" : "AL",
"doc_count" : 25
},
{
"key" : "ME",
"doc_count" : 25
},
{
"key" : "TN",
"doc_count" : 25
},
{
"key" : "WY",
"doc_count" : 25
},
{
"key" : "DC",
"doc_count" : 24
},
{
"key" : "MA",
"doc_count" : 24
},
{
"key" : "ND",
"doc_count" : 24
}
]
}
}
}
你還可以通過整合多個聚合條件來構(gòu)建更加復(fù)雜的數(shù)據(jù)結(jié)果統(tǒng)計(jì)。比如,下面這個請求在上層group_by_state基礎(chǔ)上嵌套了一個avg聚合參數(shù)來計(jì)算每個周的賬戶余額平均值。
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"size": 10
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
除了通過賬戶數(shù)量來進(jìn)行排序外, 你還可以通過terms中指定排序的標(biāo)準(zhǔn)為嵌套聚合的結(jié)果,即在terms節(jié)點(diǎn)中指定按照每個state的賬戶平均值進(jìn)行排序。
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"size": 10,
"order": {
"average_balance": "desc"
}
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
除了這些基本的存儲和指標(biāo)聚合外, Elasticsearch還提供了特殊的聚合方式在多個域上操作或者分析特殊類型的數(shù)據(jù),比如日期,ip地址,geo數(shù)據(jù)(地理位置數(shù)據(jù))。 你還可以將單個聚合的結(jié)果放入聚合管道來進(jìn)行進(jìn)一步分析。
聚合提供的核心分析能力可以用來更高級別的特性使用,比如用機(jī)器學(xué)習(xí)來監(jiān)測異常。