Elasticsearch 聚合 API

2025年3月17日 | 阅读 7 分钟

Elasticsearch 提供了聚合 API,用于数据聚合。聚合框架根据搜索查询提供聚合数据。简单来说,聚合框架收集由搜索查询选择的所有数据并提供给用户。它包含几个构建块,有助于构建复杂的数据摘要。聚合生成在 Elasticsearch 中可用的分析信息。

以下是需要注意的关于聚合的一些重要点

  • 聚合可以组合在一起以构建复杂的数据摘要。
  • 它可以被认为是 工作单元,它在 Elasticsearch 中可用的一组文档上进行分析信息。
  • 它基本上基于构建块。
  • 聚合函数与 SQL AVERAGE 和 GROUP BY COUNT 函数相同。
  • 在使用 Elasticsearch 中的聚合时,我们可以对任何数字字段执行 GROUP BY 聚合,但是对于文本字段,我们必须是 keyword 类型(keyword 类似于索引)或具有 fielddata = true

查看下图,了解聚合的样式

 Elasticsearch Aggregation APIs

聚合语法

聚合的基本结构 -

我们可以在一个操作中使用多个聚合。

aggregation - 它是 JSON 中的一个对象,用于保存要计算的聚合。 您也可以使用 aggs 关键字代替 aggregation。

aggregation_name - 每个聚合都有一个由用户定义的逻辑名称。 例如,使用 avg_price 来计算平均价格。

aggregation_type - 它是聚合的类型,因为每个聚合都有一个特定的名称。

aggregation_body - 每个聚合类型都包含其自己的聚合主体,这取决于聚合的性质。

field - 这是一个字段关键字。

document_field_name - 它是文档中目标列的名称。

聚合类型

在 Elasticsearch 中,有几种类型的聚合可用,其中每个聚合都有其自己的目的和输出。 为了简化,它们被概括为 4 个主要系列,如下所示 -

  1. 度量聚合
  2. 分桶聚合
  3. 矩阵聚合
  4. 管道聚合

度量聚合

度量聚合是一种聚合类型,负责跟踪度量指标。度量聚合从聚合文档的字段值计算矩阵。它还有助于计算一组文档的度量指标。

一些聚合生成数值度量指标,它们要么是 -

  1. 单值数值度量聚合,例如 平均聚合
  2. 多值数值度量聚合,例如 stats

分桶

分桶是一组聚合,负责构建桶。它不像度量聚合那样计算字段的度量指标。在此聚合中,每个桶都与一个键和一个文档相关联。桶聚合用于分组或创建数据桶。这些数据桶可以基于现有字段、范围和自定义过滤器等。

矩阵聚合

矩阵聚合是一种对多个字段进行操作的聚合。 它对多个字段起作用,并从从请求文档字段中提取的值生成矩阵结果。矩阵不支持脚本。

流水线

正如名称本身所暗示的那样,它从其他聚合的输出中获取输入。 换句话说,我们可以说 - 管道聚合负责聚合其他聚合的输出。

所有这些聚合都进一步分类,特别是桶、管道和度量聚合。

五个重要的聚合

下面通过示例描述了 Elasticsearch 的一些重要聚合。

  1. 平均聚合
  2. 词条聚合
  3. 基数聚合
  4. Stats 聚合

Avg 聚合

平均聚合用于计算索引中任何数值字段的平均值。 在创建查询时,在查询中指定聚合名称 avg。 查看以下示例以查找字段 “fees” 的平均值

复制代码

通过执行上述代码,我们将获得文档中存在的费用的平均值。

响应

您将获得类似以下响应的输出。

如果该字段缺失

如果该字段不存在(您正在计算平均值),则默认情况下会忽略它并返回一个空值。 您可以在聚合中添加一个缺失字段(“missing”: 0)以将缺失值视为默认值。 执行以下代码

复制代码

词条聚合

词条聚合负责通过字段值生成桶。 通过选择一个字段(如名称、入学年份等),它生成桶。 在创建查询时,在查询中指定聚合名称。

执行以下代码以搜索按入学年份字段分组的值

复制代码

通过执行上述代码,输出将作为按入学年份分组的结果返回。

响应

您将获得类似以下响应的输出。

上面的查询和响应将类似于 elasticsearch-head 插件中的以下屏幕截图

 Elasticsearch Aggregation APIs

基数聚合

找到一个字段的唯一值是一个常见的要求。 基数聚合有助于查找任何特定字段的唯一值。 它有助于确定索引中存在的唯一元素的数量。

在创建查询时,在查询中指定聚合名称。 执行以下代码以查找字段的唯一值的数量

复制代码

通过执行上述代码,输出将返回 fees 字段在 student 索引中的唯一值的总数。

响应

您将获得类似以下响应的输出。

请参阅以下屏幕截图,了解如何在 elasticsearch head 插件中运行查询并返回结果 -

 Elasticsearch Aggregation APIs

Stats 聚合

Stats 聚合代表统计信息,它是一个多值数值矩阵聚合。 它有助于一次生成总和、平均值、最小值、最大值和计数。 当聚合文档很大时,此聚合允许为特定的数值字段生成所有统计信息。 查询结构与其他聚合相同。

执行以下代码以一次查找总和、平均值、最小值、最大值和计数

复制代码

响应

通过执行上述代码,您将获得如下响应。

过滤器聚合

过滤器聚合有助于在单个桶中过滤文档。 它的主要目的是通过过滤文档为用户提供最佳结果。 让我们举一个例子,根据 “fees”“Addmission year” 过滤文档。 这将返回与查询中指定的条件匹配的文档。 您可以使用您想要的任何字段来过滤文档。

执行以下代码以过滤与您在查询中指定的条件匹配的文档

复制代码

响应

通过执行上述代码,您将获得如下响应。

上面的查询和响应将类似于 elasticsearch head 插件中的以下屏幕截图 -

 Elasticsearch Aggregation APIs