ElasticSearch 聚合分析分析
什么是聚合(Aggregation)
- ElasticSearch 除了搜索以外,提供的针对 ES 数据进行统计分析的功能
- 实时性高,Hadoop (有可能T+1)
- 通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档
- 尖沙咀和香港岛的客房数量
- 不同价格区间,可预订的经济型酒店和五星级酒店的数量
- 高性能,只需要一条语句,就可以从 ElasticSearch 得到分析结果
- 无需在客户端自己去实现分析逻辑
聚合的分类
- Bucket Aggregation : 一些列满足特定条件的文档的集合 (group by)
- Metric Aggregation : 一些数学运算,可以对文档字段进行统计分析 (sum(),count(),avg())
- Pipeline Aggregation : 对其他的聚合结果进行二次聚合
- Matrix Aggregation : 支持对多个字段的操作并提供一个结果矩阵
Bucket
-
一些例子:
- 杭州属于浙江 / 把用户分为 男性 / 女性
- 嵌套关系 : 杭州 属于浙江 属于 中国 属于亚洲
-
ElasticSearch 提供了很多类型的 Bucket,帮助你用多种方式划分文档
- Term & Range (时间 / 年龄区间 / 地理位置)
查看航班目的地的统计信息:
GET kibana_sample_data_flights/_search
{
"size":0,
"aggs":{
"flight_dest":{
"terms":{
"field":"DestCountry" # 按照字段DestCountry的Terms 进行分桶
}
}
}
}
嵌套
查看航班的目的地统计信息,平均票价,以及天气情况统计(相当于两次group by)
GET kibana_sample_data_flights/_search
{
"size":0,
"aggs":{
"flight_dest":{
"terms":{
"field": "DestCountry"
},
"aggs": {
"avg_price": {
"avg": {
"field": "AvgTicketPrice"
}
},
"weather":{
"terms": {
"field": "DestWeather"
}
}
}
}
}
}
返回结果:
Metric (运算)
- Metric 会基于数据集计算结果,除了支持在字段上进行计算,同样也支持在脚本 (painless scirpt) 产生的结果之上进行计算
- 大多数 Metric 是数学计算,仅输出一个值
- min / max / sum / avg / cardinality
- 部分 Metric 支持输出多个数值
- stats(统计,同时输出min,max,avg) /
- percentiles (百分位数)/ percentile_ranks
查看航班目的地的统计信息,均价,最高最低价
返回结果: