聚合分析是Elasticsearch数据分析的核心功能,通过对搜索结果集进行分组、统计、计算,返回结构化分析结果(而非原始文档)。其核心逻辑类比SQL的GROUP BY+聚合函数(如COUNT、AVG),但功能更强大,支持多维分析、嵌套聚合、实时计算。
Elasticsearch将聚合分为四大类,覆盖从基础统计到复杂分析的需求:
用于计算数值字段的统计指标,如平均值、总和、最大值等,是“桶内数据的量化分析”。常见类型包括:
min(最小值)、max(最大值)、avg(平均值)、sum(总和)、value_count(非空值计数);stats(一次性返回min、max、avg、sum、count)、extended_stats(扩展统计,包含方差、标准差等)、percentile(百分位数,如P90表示90%数据低于该值)。示例:统计商品价格的平均值、最大值、最小值
{
"aggs": {
"price_stats": {
"stats": {
"field": "price"
}
}
}
}
返回结果:{"count":100,"min":10.0,"max":1000.0,"avg":200.0,"sum":20000.0}
用于将文档分组(类似SQL的GROUP BY),每个满足条件的文档集合称为一个“桶”。常见类型包括:
size参数控制返回的桶数量;calendar_interval(自然时间,如月)和fixed_interval(固定时长,如30天)。示例:按商品类别分组,统计每类的销量总和
{
"aggs": {
"by_category": {
"terms": {
"field": "category.keyword"
},
"aggs": {
"total_sales": {
"sum": {
"field": "sales_count"
}
}
}
}
}
}
返回结果:{"buckets":[{"key":"electronics","doc_count":50,"total_sales":{"value":1000}},{"key":"clothing","doc_count":30,"total_sales":{"value":600}}]}
基于其他聚合的结果进行二次计算,用于分析聚合后的数据(如趋势、变化率)。常见类型包括:
示例:计算月度销量的移动平均(窗口大小为3个月)
{
"aggs": {
"by_month": {
"date_histogram": {
"field": "sale_date",
"calendar_interval": "month"
},
"aggs": {
"sales_sum": {
"sum": {
"field": "sales_count"
}
},
"moving_avg_sales": {
"moving_avg": {
"buckets_path": "sales_sum",
"window": 3
}
}
}
}
}
}
用于跨多个数值字段的矩阵分析(如计算字段间的相关性),目前处于实验阶段,适用于复杂数据关系挖掘。
聚合支持无限嵌套,通过“桶内再分桶”或“桶内加指标”实现多维分析。例如:先按“地区”分桶,再在每个地区内按“商品类别”分桶,最后计算每类的销量总和。
示例:地区+商品类别的销量统计
{
"aggs": {
"by_region": {
"terms": {
"field": "region.keyword"
},
"aggs": {
"by_category": {
"terms": {
"field": "category.keyword"
},
"aggs": {
"total_sales": {
"sum": {
"field": "sales_count"
}
}
}
}
}
}
}
}
integer/float,文本字段设为keyword用于精确聚合);query语句筛选目标数据(如range查询筛选2025年的销售记录);aggs定义聚合逻辑(如分桶、指标);filter上下文不计算相关性评分,性能更高(如bool查询中的must改为filter);_source参数仅返回需要的字段,减少数据传输量;terms聚合),避免在大规模数据上使用terms聚合(可改用histogram/date_histogram聚合)。聚合分析的结果可通过可视化工具展示,提升数据可读性:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。