Aggregation | 聚合
- 聚合 ElasticSearch 除搜索以外,提供的针对 ES 数据进行统计分析的功能;
- 实时性高;
- Hadoop 是 T + 1 的;
- 通过聚合,会得到数据的概览,是分析和总结全套数据,而不是寻找单个文档;
- 尖沙咀和香港岛的房客数量;
- 不同的价格区间,可预定的经济型酒店和五星级酒店的数量;
- 高性能,只需要一条语句,就可以从 ElasticSearch 中得到分析结果;
- 无需在客户端自己去实现分析逻辑;
- Kibana 中大量的可视化报表都是基于 ElasticSearch 的聚合分析
- 公司程序员的工作岗位分布;
- 公司采用的编程框架分布;
- 公司员工薪水分布;
- 客户的地理位置分布;
- 订单的增长情况;
Aggregation | 聚合 | 分类
- Bucket Aggregation - 一系列满足特定条件的文档的集合;
- Metic Aggregation - 一些数学运算,可以对文档字段进行统计分析;
- Pipeline Aggregation - 对其他的聚合结果进行二次聚合;
- Matrix Aggregation - 支持对多个字段的操作,并提供一个结果矩阵;
Bucket & Metric
select count(brand) from cars group by brand
- Metric 可以理解为 SQL 中一系列统计方法,比如 count;
- Bucket 可以理解为 SQL 中的一个 GROUP,根据一定的条件,把结果分成一个个的 GROUP;
Bucket | 举几个栗子
- 商品可以分成三个 Bucket:高档,中档,低档;
- 高档 Bucket 还可以分成三个 Bucket:好评,中评,差评;
按照目的地进行分桶统计
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs":{
"flight_dest":{
"terms":{
"field":"DestCountry"
}
}
}
}
Metric | 举几个栗子
- Metic 会基于数据集计算结果,除了支持在字段上进行计算,同样也支持在脚本(painless script)产生的结果之上进行计算;
- 大多数 Metric 是数学计算,仅输出一个值:min / max / sum / avg / cardinality;
- 部分 Metric 支持输出多个值:stats / percentiles / percentile_ranks;
查看航班目的地的统计信息,增加平均,最高,最低价格
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
}
}
}
}
}
}