es的聚合總共分為四種aggregations
1.bucketing(桶聚合,group by的操作)
2.meric(指標聚合,min,max,count,avg,sum等操作)
3.matrix,可以對文檔進行一些統(tǒng)計,但是不支持腳本,上面兩個都是支持腳本的
4.pipeline,可以對聚合結(jié)果進行二次聚合
聚合分析算是es提供的功能的第二大功能,第一大是搜索,如果在數(shù)據(jù)量不是很大,對聚合的實時性和要求不高的情況下,可以替流處理和批處理,當然etl數(shù)據(jù)清洗的步驟還是要的,在實時性上,以定時任務(wù)去分析es中的數(shù)據(jù)對于快速搭建監(jiān)控平臺是很好的一個手段,但是當數(shù)據(jù)量過大,而要求很高的實時性和準確性時,es略顯有點疲軟,還是得依賴于批處理和流處理這種大數(shù)據(jù)計算框架.
1.bucketing
以kibana提供的樣本數(shù)據(jù)kibana_sample_data_flights為例,查詢所有機票的平均價格,總和,最大,最小,stats一個指標可以聚合上述的幾個結(jié)果,missing 代表如果這個doc沒有這個字段該如何處理
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"avg_price": {
"avg": {
"field": "AvgTicketPrice",
"missing":10
}
},
"sum_price": {
"sum": {
"field": "AvgTicketPrice"
}
},
"min_price": {
"min": {
"field": "AvgTicketPrice"
}
},
"max_price": {
"max": {
"field": "AvgTicketPrice"
}
},
"total_stats":{
"stats": {
"field": "AvgTicketPrice"
}
}
}
}
利用腳本,腳本的威力就在于可以自定義一些條件,然后修改一些值,比如給AvgTicketPrice先調(diào)高個10塊錢,再去聚合結(jié)果
{
"size": 0,
"aggs" : {
"avg_corrected_grade" : {
"avg" : {
"field" : "AvgTicketPrice",
"script" : {
"lang": "painless",
"source": "_value + params.sub",
"params" : {
"sub" : 10
}
}
}
}
}
}