前言
Elasticsearch除搜索以外,还提供了针对数据统计分析的功能,通过各种API可以构建数据的复杂查询,不同类型的聚合查询都有自己的目的和输出,为了更好的理解这些类型,人们通常又会把它们分为三大类。
聚合类型三大类
Bucketing(桶聚合)
每个桶都与一个键和一个文档标准相关联,通过桶的聚合查询,我们将得到一个桶的列表,即:满足条件的文档集合。
Metric(指标)
计算一组文档的某些指标项的聚合
Pipeline(管道)
对其他聚合的输出或相关指标进行二次聚合
Metric Aggregations
Avg Aggregation
用于计算文档中数值的平均值,只能对数值类型的进行计算
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
}
}
}
}
}
}
Cardinality Aggregation
对不同值进行统计计算,类似于sql中的 distinct 后进行count,去重求和。
查询目的地国家的种类
POST kibana_sample_data_flights/_search
{
"aggs": {
"dest_count": {
"cardinality": {
"field": "DestCountry"
}
}
}
}
Stats Aggregation
统计聚合,返回的统计数据包括:min,max,sum,count和avg。
GET /kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"multi_stats": {
"stats": {
"field": "AvgTicketPrice"
}
}
}
}
Extended Stats Aggregation
扩展统计聚合,包含了多种指标的聚合信息
GET /kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"multi_stats": {
"extended_stats": {
"field": "AvgTicketPrice"
}
}
}
}
Max Aggregation
计算文档中数值的最大值
GET /kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"max_ticket": {
"max": {
"field": "AvgTicketPrice"
}
}
}
}
Min Aggregation
同样可以计算最小值
Percentiles Aggregation
用于计算从文档中提取数值的一个或多个百分位数,默认百分位数范围[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
Percentile Ranks Aggregation
百分位排名聚合查询
从以下查询,可以看出100%的票价低于1200,93%的票价低于1000。
GET /kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"AvgTicketPrice": {
"percentile_ranks": {
"field": "AvgTicketPrice",
"values": [1000,1200]
}
}
}
}
Sum Aggregation
汇总文档中提取的数值
GET /kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"sum_price": {
"sum": {
"field": "AvgTicketPrice"
}
}
}
}
Value Count Aggregation
用于计算从聚合文档中提取的值的数量
GET /kibana_sample_data_flights/_search
{
"size": 0,
"aggs": {
"value_count": {
"value_count": {
"field": "AvgTicketPrice"
}
}
}
}
文档总数就是13059,说明每个文档都有AvgTicketPrice值