Elasticsearch 提供了强大的聚合功能,允许用户对数据进行深入的统计分析。度量(Metric)聚合是其中一种,它用于对数值型数据进行计算,如求和、平均值、最大值、最小值等。本文将详细介绍 Elasticsearch 的度量聚合,并提供完整的示例和解释。
度量聚合基础
度量聚合用于执行数值计算,它可以帮助我们快速获得数据集的关键统计信息。常见的度量聚合包括:
- Avg:计算平均值。
- Sum:计算总和。
- Min:找出最小值。
- Max:找出最大值。
- Stats:同时计算多个度量指标,如最大值、最小值、平均值和总和。
示例:Stats 聚合
假设我们有一个酒店数据索引,我们想要计算每个酒店品牌的用户评分的最小值、最大值和平均值。
DSL 查询
json
GET /hotel/_search
{
"size": 0,
"aggs": {
"brandAgg": {
"terms": {
"field": "brand",
"size": 20
},
"aggs": {
"score_stats": {
"stats": {
"field": "score"
}
}
}
}
}
}
解释
size: 0
表示我们不需要原始文档的列表,只关心聚合结果。aggs
:定义聚合的区域。brandAgg
:为聚合操作定义的名称,这里使用了 Terms 聚合按品牌分组。terms
:指定聚合类型为词条聚合,field
指定聚合字段为brand
,size
限制返回的品牌数量。score_stats
:在 Brands 聚合内部定义的子聚合,用于计算评分统计。stats
:聚合类型,用于计算score
字段的多个统计指标。
嵌套度量聚合
度量聚合可以嵌套在其他聚合内部,例如在桶聚合内部计算每个桶的度量指标。
DSL 查询
json
GET /hotel/_search
{
"size": 0,
"aggs": {
"brandAgg": {
"terms": {
"field": "brand",
"size": 20,
"order": {
"_count": "asc"
}
},
"aggs": {
"scoreAgg": {
"stats": {
"field": "score"
}
}
}
}
}
}
解释
order
:指定 Bucket 聚合结果的排序方式,这里按照_count
升序排列。scoreAgg
:在 Brands 聚合内部定义的另一个子聚合,用于计算每个品牌评分的统计数据。
结语
度量聚合是 Elasticsearch 中进行数值计算的重要工具。通过本篇文章的示例和解释,你应该对如何使用度量聚合有了更深入的理解。无论是计算平均评分、总和、最大值还是最小值,度量聚合都能提供灵活且强大的支持。掌握度量聚合的使用,将有助于你更有效地进行数据分析和探索。希望本文能够帮助你在实际项目中更好地利用 Elasticsearch 的聚合功能。