本文共 6940 字,大约阅读时间需要 23 分钟。
聚合是一种基于搜索的数据汇总,通过组合可以完成复杂的操作。聚合可以对文档进行汇总、分组等。通过聚合,我们会得到一个数据的概览,是分析和总结全部的数据,而不是寻找单个文档。
{ "size": 0, ["query": {}, ]? "aggs" : { "${my_name}" : { "${aggregation_type}" : {} [,"meta" : { [ ] } ]? [,"aggs" : { [ ]+ } ]? } [,"${my_name}" : { ... } ]* }}
使用kibana导入“kibana_sample_data_flights”,这个是飞机的航班信息,有地区、价格、天气等信息。
操作路径:Home --> 添加数据 --> 样例数据 --> Sample flight data
根据目的地(DestCountry)进行分组,查看航班的数量
GET kibana_sample_data_flights/_search{ "size": 0, "aggs": { "dest_count": { "terms": { "field": "DestCountry" } } }}
根据价格区间进行分组,比如0到100元多少个,100到200元多少个
GET kibana_sample_data_flights/_search{ "size": 0, "aggs": { "price_stat": { // 自定义名字 "histogram": { "field": "AvgTicketPrice", "interval": 100 // 指定区间 } } }}
输出的结果中,key为“100.0”代表0到100.0的数据,计算公式如下
bucket_key = Math.floor(value / interval) * interval
GET kibana_sample_data_flights/_search{ "size": 0, "aggs": { "price_stat": { "date_histogram": { "field": "timestamp", "calendar_interval": "month" } } }}
注意:日期间隔设置,7.x版本用“calendar_interval”,老版本用“interval”。
支持的时间间隔表达式
计算度量这类的聚合操作是以使用一种方式或者从文档中提取需要聚合的值为基础的。这些数据不但可以从文档(使用数据属性)的属性中提取出来,也可以使用脚本生成。
支持max、min、count、sum、avg、stats(各种统计信息)、cardinality(去重后数量)、percentiles(百分位)、geo_bounds(地理边界)
输出航班的最大价格,最小价格
GET kibana_sample_data_flights/_search{ "size": 0, "aggs": { "max_price": { "max": { "field": "AvgTicketPrice" } }, "mix_price": { "min": { "field": "AvgTicketPrice" } } }}
输出各个目的地航班的最