什么是聚合(Aggregation)
-
ElasticSearch除搜索以外,提供针对ES数据进行分析的功能
实时性高
Hadoop (T+1)
通过聚合,我们会得到一个数据的概览, 是分析和总结全套的数据,而不是寻找单个文档
-
高性能,只需要一条语句,就可以从ElasticSearch得到分析结果
- 无需在客户端自己去实现分析逻辑
Kibana可视化报表 - 聚合分析
公司程序员的工作岗位分布
公司采用的编程框架分布
公司员工薪水分布
客户的地理位置分布
订单的增长情况
等等...
集合的分类
Bucket Aggregation - 一些列满足特定条件的文档的集合
Metric Aggregation - 一些数学运算,可以对文档字段进行统计分析
Pipeline Aggregation - 对其他的聚合结果进行二次聚合
Matrix Aggregation - 支持对多个字段的操作并提供一个结果矩阵
Bucket & Metric
Bucket
-
一些例子
杭州属于浙江 / 一个演员属于男性或女性
嵌套关系 - 杭州属于浙江属于中国属于亚洲
-
ElasticSearch提供了很多类型的Bucket,帮助你用多种方式划分文档
- Term&Range (时间/年龄区间/地理)
Metric
Metric会基于数据计算结果,除了支持在字段上进行计算,同样也支持在脚本(painless script)产生的结果之上进行计算
-
大多数Metric是数学计算,仅输出一个值
- min/max/sum/avg/cardinality
-
部分metric支持输出多个数值
- stats/precentiles/percentile_rank
一个Bucket的例子
查看航班目的地的统计信息
加入Metrics
查看航班上的地的统计信息,增加均价,最高最低价格
嵌套
查看航班上的地的统计信息,平均票价,以及天气状况
课程Demo
- 需要通过Kibana导入Sample Data的飞机航班数据。具体参考“2.2节-Kibana的安装与界面快速浏览”
#按照目的地进行分桶统计
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs":{
"flight_dest":{
"terms":{
"field":"DestCountry"
}
}
}
}
#查看航班目的地的统计信息,增加平均,最高最低价格
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs":{
"flight_dest":{
"terms":{
"field":"DestCountry"
},
"aggs":{
"avg_price":{
"avg":{
"field":"AvgTicketPrice"
}
},
"max_price":{
"max":{
"field":"AvgTicketPrice"
}
},
"min_price":{
"min":{
"field":"AvgTicketPrice"
}
}
}
}
}
}
#价格统计信息+天气信息
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs":{
"flight_dest":{
"terms":{
"field":"DestCountry"
},
"aggs":{
"stats_price":{
"stats":{
"field":"AvgTicketPrice"
}
},
"wather":{
"terms": {
"field": "DestWeather",
"size": 5
}
}
}
}
}
}
相关阅读