本文共 2972 字,大约阅读时间需要 9 分钟。
Elasticsearch除搜索以外,还提供了针对数据统计分析的功能,通过各种API可以构建数据的复杂查询,不同类型的聚合查询都有自己的目的和输出,为了更好的理解这些类型,人们通常又会把它们分为三大类。
每个桶都与一个键和一个文档标准相关联,通过桶的聚合查询,我们将得到一个桶的列表,即:满足条件的文档集合。
计算一组文档的某些指标项的聚合
对其他聚合的输出或相关指标进行二次聚合
用于计算文档中数值的平均值,只能对数值类型的进行计算
GET /kibana_sample_data_flights/_search{ "aggs": { "avg_AvgTicketPrice": { "avg": { "field": "AvgTicketPrice" } } }}
同样支持脚本
GET /kibana_sample_data_flights/_search{ "aggs": { "avg": { "avg": { "script": { "source": "doc.AvgTicketPrice.value" } } } }}
对结果乘以100
GET /kibana_sample_data_flights/_search{ "aggs": { "avg": { "avg": { "field": "AvgTicketPrice", "script": { "lang": "painless", "source": "_value * params.correction", "params": { "correction":100 } } } } }}
对不同值进行统计计算,类似于sql中的 distinct 后进行count,去重求和。
查询目的地国家的种类
POST kibana_sample_data_flights/_search{ "aggs": { "dest_count": { "cardinality": { "field": "DestCountry" } } }}
统计聚合,返回的统计数据包括:min,max,sum,count和avg。
GET /kibana_sample_data_flights/_search{ "size": 0, "aggs": { "multi_stats": { "stats": { "field": "AvgTicketPrice" } } }}
扩展统计聚合,包含了多种指标的聚合信息
GET /kibana_sample_data_flights/_search{ "size": 0, "aggs": { "multi_stats": { "extended_stats": { "field": "AvgTicketPrice" } } }}
计算文档中数值的最大值
GET /kibana_sample_data_flights/_search{ "size": 0, "aggs": { "max_ticket": { "max": { "field": "AvgTicketPrice" } } }}
同样可以计算最小值
用于计算从文档中提取数值的一个或多个百分位数,默认百分位数范围[1,5,25,50,75,95,99]
GET /kibana_sample_data_flights/_search{ "size": 0, "aggs": { "AvgTicketPrice": { "percentiles": { "field": "AvgTicketPrice", "percents": [ 1, 5, 25, 50, 75, 95, 99 ] } } }}
可以看到,99%的票价低于1166,95%票价低于1035,50%票价低于640
百分位排名聚合查询
从以下查询,可以看出100%的票价低于1200,93%的票价低于1000。
GET /kibana_sample_data_flights/_search{ "size": 0, "aggs": { "AvgTicketPrice": { "percentile_ranks": { "field": "AvgTicketPrice", "values": [1000,1200] } } }}
汇总文档中提取的数值
GET /kibana_sample_data_flights/_search{ "size": 0, "aggs": { "sum_price": { "sum": { "field": "AvgTicketPrice" } } }}
用于计算从聚合文档中提取的值的数量
GET /kibana_sample_data_flights/_search{ "size": 0, "aggs": { "value_count": { "value_count": { "field": "AvgTicketPrice" } } }}
文档总数就是13059,说明每个文档都有AvgTicketPrice值
转载地址:http://delrb.baihongyu.com/