es的聚合总共分为四种aggregations
1.bucketing(桶聚合,group by的操作)
2.meric(指标聚合,min,max,count,avg,sum等操作)
3.matrix,可以对文档进行一些统计,但是不支持脚本,上面两个都是支持脚本的
4.pipeline,可以对聚合结果进行二次聚合
聚合分析算是es提供的功能的第二大功能,第一大是搜索,如果在数据量不是很大,对聚合的实时性和要求不高的情况下,可以替流处理和批处理,当然etl数据清洗的步骤还是要的,在实时性上,以定时任务去分析es中的数据对于快速搭建监控平台是很好的一个手段,但是当数据量过大,而要求很高的实时性和准确性时,es略显有点疲软,还是得依赖于批处理和流处理这种大数据计算框架.
1.bucketing
以kibana提供的样本数据kibana_sample_data_flights为例,查询所有机票的平均价格,总和,最大,最小,stats一个指标可以聚合上述的几个结果,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先调高个10块钱,再去聚合结果
{
"size": 0,
"aggs" : {
"avg_corrected_grade" : {
"avg" : {
"field" : "AvgTicketPrice",
"script" : {
"lang": "painless",
"source": "_value + params.sub",
"params" : {
"sub" : 10
}
}
}
}
}
}
网友评论