在Elasticsearch 7.3 中,聚合(Aggregations)是一种强大的数据分析工具,主要用于对搜索结果进行统计计算和分组。聚合有两种主要类型:Bucket(桶)聚合 和 Metric(度量)聚合。
Bucket 聚合
Bucket聚合是用来对数据进行分组或分类的,类似于SQL中的GROUP BY
操作。它会根据指定的条件把文档放入不同的桶(bucket)中,每个桶代表一组具有相同特征的文档集合。
例如,假设我们有一个电商产品索引,想要统计不同颜色电视机的平均售价,可以使用terms
聚合按照color
字段进行分组,并在每个颜色分组内再进行avg
聚合计算平均价格:
GET /products/_search
{
"size": 0,
"aggs": {
"colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
Metric 聚合
Metric聚合则用于计算特定字段的统计值,如总数、平均值、最大值、最小值、求和等。这些聚合不需要进行分组,直接应用于整个数据集或Bucket聚合产生的每个桶内。
例如,如果我们想计算整个索引中所有产品的平均价格,可以直接使用avg
聚合:
GET /products/_search
{
"size": 0,
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
结合这两种类型的聚合,可以构建出复杂的多级嵌套聚合,从而实现深层次的数据分析需求。在实际应用中,常见的Bucket聚合还包括date_histogram
(按时间段分组)、range
(按数值范围分组)等;Metric聚合则有sum
、min
、max
、stats
(综合统计信息)、cardinality
(唯一计数)等。