什么是聚合(Aggregation)
- Elasticsearch 除搜索以外,提供针对ES数据进行统计分析的功能
- 实时性高
- Hadoop(T+1)
- 通过聚合,我们会得到一个数据的概览,是分析和总结全套数据,而不是寻找单个文档
- 统计到各个国家的航班
- 根据航班目的地统计机票的最大值,最小值、平均值等。
- 高性能,只需要一条语句,就可以从Elasticsearch 得到分析结果
Kibana 可视化报表 -- 聚合分析
- 公司程序员的工作岗位和技能分布
- 公司采用的编程框架分布
- 公司员工薪水分布
- 客户的地理位置分布
- 订单的增长情况
- ...
集合的分类
- Bucket Aggregation 一些列满足特定条件的文档的集合
- 一组满足条件的文档 类似SQL的GROUP by name
- 一些例子
- 杭州属于浙江/ 一个演员属于男或女性
- 嵌套关系 -- 杭州属于浙江属于中国属于亚洲
- Elasticsearch 提供了很多类似的Bucket,帮助你用多种方式划分文档
- Term & Range (时间/年龄区间/地理位置)
- Metric Aggregation 一些数学运算,可以对文档字段进行统计分析
- 一系列的统计分发,类似SQL 的count、avg
- 基于数据统计计算结果,除了支持在字段上进行计算,同样也支持在脚本(painless script)产生的结果之上进行计算
- 大多数Metric 是数学计算,仅输入一个值
- min 、max、sum、avg、cardinality
- 部分metric 支持输出多个数值
- stats / percentiles / percentile_ranks
- Pipeline Aggregation 对其他的聚合结果进行二次聚合
- Matrix Aggregation 支持对多个字段的操作提供一个结果矩阵
一个Bucket 的例子
// 查看航班目的地的统计信息
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"flight_dest": {
"terms": {
"field": "DestCountry"
}
}
}
}// 按照字段的Terms进行分桶
一个Metrics例子
// 查看航班目的地的统计信息,增加平均,最高最低价格
GET kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"flight_dest": {
"terms": {
"field": "DestCountry"
},
"aggs": { # 关键字--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
}
}
}
}
}
}