📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

聚合分析(Aggregation)是搜索引擎中非常重要的一类功能,它用于对大量数据进行统计与分类计算,让数据分析变得更直观、更高效。在 Easysearch 中,聚合分析直接支持在搜索请求中对数据执行统计、分组、分桶等操作,是构建分析平台、报表系统以及仪表盘等产品的基础。

本文将围绕 Easysearch 中聚合分析的两个核心概念 —— 指标聚合(Metrics)桶聚合(Buckets),讲清它们是什么、怎么用以及它们在数据分析中起到什么作用。内容适合掌握基础搜索概念的开发者、运维人员或分析师快速理解聚合的本质。


一、什么是 Easysearch? #

在进入聚合分析之前,我们先简单了解 Easysearch 是什么。

Easysearch 是一款分布式搜索型数据库,支持全文检索、结构化检索、多功能组合查询、向量检索、空间地理检索、语义分析以及聚合分析等功能。它诞生于对 Elasticsearch 进行深度优化和国产化改造的基础之上,保留了丰富的搜索能力,同时在易用性、轻量级、稳定性等方面做了优化,适合企业级数据检索与分析场景。

聚合分析是 Easysearch 的关键能力之一,它让你能够像写分析语句一样,通过搜索 API 得到诸如数据总量、平均值、最大/最小值以及分类统计等结果。


二、聚合分析的两个核心:指标聚合与桶聚合 #

在 Easysearch 中,聚合分析通常分成两个层面:

  • 指标聚合(Metric Aggregations):对数值数据进行计算,如平均值、求和、最小/最大值等;
  • 桶聚合(Bucket Aggregations):对数据进行“分组”,相当于是“把数据划分成多个区间或类别”。

理解这两个概念,就基本掌握了聚合分析的主体。


三、指标聚合:统计指标是什么? #

指标聚合 是一种对指定字段的数值做统计汇总的聚合方式,不会把数据分成多个分组,而是对整体数据或某个子集数据进行计算。

1. 常见的指标聚合类型 #

Easysearch 常用的指标聚合包括:

聚合类型作用
avg求字段的平均值
sum求字段的总和
min求字段的最小值
max求字段的最大值

这些聚合可以直接告诉我们某个字段的统计特征,例如平均销售额、总订单数、最小回应时间等。

2. 通俗解释 #

  • avg(平均值):把所有符合条件的数值相加后除以数量,给出一个平均参考;
  • sum(总和):把所有数值加起来,用于求合计;
  • min(最小值) & max(最大值):分别表示这一组数据中最小的值和最大的值。

比如统计某个字段 price 的平均值,就是告诉我们该字段的数据中心趋势,而不是具体某条记录的值。


四、桶聚合:如何分组和分类数据 #

桶聚合是聚合分析的“核心分类方式”,它把符合条件的数据划分成一个一个的桶(bucket),每个桶对应一类数据或一个值区间,然后我们可以对每个桶再做指标聚合。

1. 最简单的桶:Terms 聚合 #

Terms(术语)聚合是最常见的桶聚合。它根据某个字段的值进行分组,返回每种不同取值分别对应的桶。例如:

{
  "aggs": {
    "group_by_status": {
      "terms": {
        "field": "status.keyword"
      }
    }
  }
}

这个聚合会根据 status 字段的不同值建立多个桶。例如值为 "200""404""500" 的请求分别形成不同的桶。每个桶都有自己的文档计数(doc_count),以及该值的聚合结果统计。

2. “桶”在数据分析中的意义 #

在分析场景中,桶聚合相当于 SQL 中 GROUP BY 的逻辑。每个桶相当于一个分组,它让我们可以:

  • 统计不同类别的数据量
  • 结合指标聚合在每个组内做统计
  • 构建分类报表和可视化图表

例如统计不同城市的订单数量,或按状态码分类统计请求次数。

3. 聚合使用注意事项 #

  • 聚合分析通常作用于数值型字段或不分词的 keyword 类型字段。
  • 聚合分析是在内存中进行的,对于海量数据的聚合,合理的分片设计和查询优化非常重要

五、指标聚合与桶聚合如何联合使用 #

单独使用指标聚合只能得到对整个数据集的一个统计值,但在实际分析中,我们往往需要结合桶聚合来在每一个分组内做指标统计。

例如,我们希望统计每种 status 的平均响应时间:

{
  "aggs": {
    "by_status": {
      "terms": {
        "field": "status.keyword"
      },
      "aggs": {
        "avg_resp_time": {
          "avg": {
            "field": "response_time"
          }
        }
      }
    }
  }
}

这个查询的执行逻辑是:

  1. terms 聚合把文档按 status 分组;
  2. 对每个组内的 response_time 字段做平均值统计。

这种“分组 + 统计”的模式,是构建大多数分析报告的基础。


六、桶聚合的扩展与作用 #

除了最常见的 terms 桶聚合,Easysearch 还支持更多形式的桶聚合,例如:

  • 范围桶(range、date_range):按数值或时间范围分组;
  • 地理桶(geo_distance、geohash_grid):按地理位置分组;
  • 嵌套桶(nested):对嵌套对象字段分组;
  • 过滤桶(filter、filters):按过滤条件划分不同桶;
  • 采样桶(sampler):抽样后再分桶,提升性能,主要用于在大数据量下通过样本估算分布;
  • 显著性桶(significant_terms / significant_text):找出具有统计意义的词或文本,它不是简单的分组,而是找出某种“异常”或“特征”的频率,这在安全审计中很有用。

这些桶聚合提供了更加丰富的分组能力,让聚合分析不仅限于简单分组,还支持时间区间、空间范围等维度的分析。


七、聚合分析的实际意义 #

聚合分析在开发中到底有何价值?换句话说,它解决了什么问题:

1. 快速构建统计报表 #

你可以通过聚合分析获得诸如:

  • 每个国家/城市的用户数量
  • 各种状态码的请求次数
  • 不同时间段内的平均响应时间
  • 某个字段的总和或最值

这些是数据分析、业务监控、KPI 报表等常见需求。


八、总结 #

Easysearch 聚合分析的核心是 指标聚合桶聚合

  • 指标聚合用于对数值字段做数学统计,如 avg、sum、min、max;
  • 桶聚合用于把数据划分为多个分组,每个分组可以进一步执行其他聚合操作;
  • 组合使用桶聚合与指标聚合,可以实现 分类统计分析
  • Easysearch 支持丰富的桶聚合类型,适应各种分析场景。

掌握以上概念后,你就能用 Easysearch 构建复杂的数据统计和分析查询,为数据驱动决策提供基础能力。