聚合
聚合表示的是對(duì)某個(gè)索引(index)下的所有文檔進(jìn)行一些統(tǒng)計(jì)之類的操作掷伙,如下圖1所示蹬叭,將左邊索引中的文檔按照作者姓名進(jìn)行分組行疏,姓名相同的在一個(gè)組里弱匪,就可以分為下圖右邊的兩個(gè)組柠逞,從中我們就可以得出名為allen的作者共寫了兩篇文章昧狮,名為smith的作者共寫了三篇文章。在ES中板壮,提供了豐富的語(yǔ)法逗鸣,來(lái)進(jìn)行對(duì)文檔的統(tǒng)計(jì)操作,如對(duì)所有文檔按照ip地址范圍進(jìn)行分組绰精,對(duì)所有文檔按照經(jīng)緯度范圍進(jìn)行分組撒璧,對(duì)距離進(jìn)行分組(如圖2)等等。
在ES的語(yǔ)法中笨使,分組稱之為桶聚合(bucket)卿樱,對(duì)桶內(nèi)的文檔進(jìn)行一些數(shù)值計(jì)算,如求和硫椰,求最大等稱之為指標(biāo)聚合(metric)繁调,還有一些其他聚合如pipeline,matric靶草,在此僅介紹下桶聚合和指標(biāo)聚合蹄胰。
桶聚合和指標(biāo)聚合
根據(jù)上面我們桶聚合就是對(duì)所有文檔按照某些規(guī)則進(jìn)行分組,然后文檔滿足這些規(guī)則放入一個(gè)桶奕翔,不滿足有放入另外一個(gè)桶裕寨。而指標(biāo)集合指的是對(duì)文檔集中的某一個(gè)字段進(jìn)行數(shù)值上的操作,如求和糠悯,求最大最下等帮坚。
ES聚合語(yǔ)法模板(圖3)
- 寫關(guān)鍵字aggs
- 寫聚合的名字
- 寫聚合的類型(桶聚合和指標(biāo)聚合)妻往,及在類型里寫相應(yīng)的邏輯
常見(jiàn)桶聚合類型
類型 | 說(shuō)明 |
---|---|
filter | 篩選滿足字段條件的文檔 |
terms | 對(duì)文檔集按照某一字段的不同取值進(jìn)行分組 |
range | 對(duì)文檔集按照某一字段的取值范圍進(jìn)行分組 |
注:terms中不能對(duì)text 類型進(jìn)行操作
常見(jiàn)指標(biāo)聚合類型
類型 | 說(shuō)明 |
---|---|
avg | 對(duì)文檔集中指定字段的值求平均值 |
max | 對(duì)文檔集中指定字段的值求最大值 |
min | 對(duì)文檔集中指定字段的值求最小值 |
sum | 對(duì)文檔集中指定字段的值求和 |
stats | 對(duì)文檔集中指定字段的值求統(tǒng)計(jì)信息,最大试和,最小讯泣,平均等 |
例子
以kibana_sample_data_ecommerce樣本數(shù)據(jù)為例子
- 查詢所有類別為男裝的總稅費(fèi)價(jià)格
GET /kibana_sample_data_ecommerce/_search?
{
"size":0,
"aggs": {
"filter_category": {
"filter": {
"term":{
"category.keyword":"Men's Clothing"
}
},
"aggs":{
"sum_tax":{
"sum":{
"field":"taxful_total_price"
}
}
}
}
}
}
# -----------------------------------------------------------------------
"aggregations" : {
"filter_category" : {
"doc_count" : 2024,
"sum_tax" : {
"value" : 149393.91015625
}
}
}
- 查詢所有交易的平均稅費(fèi)還有不同類別下不同制造的平均稅費(fèi)
GET /kibana_sample_data_ecommerce/_search?size=0
{
"aggs": {
"all_sum_tax":{
"sum":{
"field":"taxful_total_price"
}
},
"term_category": {
"terms": {
"field":"category.keyword"
},
"aggs":{
"manufactur":{
"terms":{
"field":"manufacturer.keyword"
},
"aggs":{
"avg_tax":{
"avg":{
"field":"taxful_total_price"
}
}
}
}
}
}
}
}
# ------------------------------------------------------------------------------
{
"all_sum_tax" : {
"value" : 350884.12890625
}
"buckets" : [
{
"key" : "Men's Clothing",
"doc_count" : 2024,
"manufactur" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Elitelligence",
"doc_count" : 1242,
"avg_tax" : {
"value" : 67.25540333132045
}
},
{
"key" : "Low Tide Media",
"doc_count" : 1125,
"avg_tax" : {
"value" : 79.21282638888889
}
},
{
"key" : "Oceanavigations",
"doc_count" : 600,
"avg_tax" : {
"value" : 91.83341145833333
}
},
{
"key" : "Microlutions",
"doc_count" : 308,
"avg_tax" : {
"value" : 70.6087789163961
}
},
...
}
{....},
...,
{....}]