桶(bucket)和名額(metric)
(1)桶
a、簡單來說桶就是滿足特定條件的文檔的集合。
b、當聚合開始被執行,每個文檔裡面的值通過計算來決定符合哪個桶的條件,如果比對到,文檔将放入相應的桶并接着開始聚合操作。
c、桶也可以被嵌套在其他桶裡面。
(2)名額
a、桶能讓我們劃分文檔到有意義的集合,但是最終我們需要的是對這些桶内的文檔進行一些名額的計算。分桶是一種達到目的地的手段:它提供了一種給文檔分組的方法來讓我們可以計算感興趣的名額。
b、大多數名額是簡單的數學運算(如:最小值、平均值、最大值、彙總),這些是通過文檔的值來計算的。
(3)桶和名額的組合
聚合是由桶和名額組成的。聚合可能隻有一個桶,可能隻有一個名額,或者可能兩個都有。也有可能一些桶嵌套在其他桶裡面。
使用示例
GET /cars/transactions/_search
{
"size" : 0,
"aggs": {
"colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": { "avg": { "field": "price" }
},
"make" : {
"terms" : {
"field" : "make"
},
"aggs" : {
"min_price" : { "min": { "field": "price"} },
"max_price" : { "max": { "field": "price"} }
}
}
}
}
}
}
{
...
"aggregations": {
"colors": {
"buckets": [
{
"key": "red",
"doc_count": 4,
"make": {
"buckets": [
{
"key": "honda",
"doc_count": 3,
"min_price": {
"value": 10000
},
"max_price": {
"value": 20000
}
},
{
"key": "bmw",
"doc_count": 1,
"min_price": {
"value": 80000
},
"max_price": {
"value": 80000
}
}
]
},
"avg_price": {
"value": 32500
}
},
...