Elasticsearch 中如何进行范围聚合?

推荐答案

在 Elasticsearch 中,范围聚合(Range Aggregation)用于根据指定的范围对文档进行分组。以下是一个简单的示例,展示如何使用范围聚合:

-- -------------------- ---- -------
-
  ------- --
  ------- -
    --------------- -
      -------- -
        -------- --------
        --------- -
          - ----- -- --
          - ------- --- ----- --- --
          - ------- --- -
        -
      -
    -
  -
-

在这个示例中,我们对 price 字段进行范围聚合,将其分为三个范围:小于 50、50 到 100、以及大于 100。

本题详细解读

1. 范围聚合的基本概念

范围聚合(Range Aggregation)是 Elasticsearch 中一种常用的聚合方式,它允许你根据指定的数值范围对文档进行分组。每个范围可以定义为一个区间,区间可以是开区间(只定义 fromto)或闭区间(同时定义 fromto)。

2. 范围聚合的语法

范围聚合的基本语法如下:

-- -------------------- ---- -------
-
  ------- -
    ------------------- -
      -------- -
        -------- -------------
        --------- -
          - ------- --- ----- -- --
          - ------- --- ----- -- --
          - ------- -- -
        -
      -
    -
  -
-
  • aggregation_name:聚合的名称,可以自定义。
  • field:要进行范围聚合的字段名。
  • ranges:定义范围的数组,每个范围可以包含 fromto 两个属性。

3. 范围聚合的示例

假设我们有一个包含商品价格的索引,我们想要根据价格范围对商品进行分组:

-- -------------------- ---- -------
-
  ------- --
  ------- -
    --------------- -
      -------- -
        -------- --------
        --------- -
          - ----- -- --
          - ------- --- ----- --- --
          - ------- --- -
        -
      -
    -
  -
-

在这个示例中,price_ranges 是聚合的名称,price 是要进行聚合的字段。ranges 定义了三个范围:

  • 价格小于 50 的商品
  • 价格在 50 到 100 之间的商品
  • 价格大于 100 的商品

4. 范围聚合的结果

执行上述查询后,Elasticsearch 会返回类似以下的结果:

-- -------------------- ---- -------
-
  --------------- -
    --------------- -
      ---------- -
        -
          ------ ---------
          ----- -----
          ------------ --
        --
        -
          ------ -------------
          ------- -----
          ----- ------
          ------------ --
        --
        -
          ------ ----------
          ------- ------
          ------------ --
        -
      -
    -
  -
-
  • key:表示范围的标识符。
  • fromto:表示范围的起始和结束值。
  • doc_count:表示该范围内的文档数量。

5. 范围聚合的扩展

范围聚合还支持一些扩展功能,例如:

  • 自定义范围键:可以为每个范围指定自定义的键名。
  • 脚本支持:可以使用脚本来动态计算范围。
  • 子聚合:可以在范围聚合的基础上进行进一步的子聚合。

通过这些扩展功能,范围聚合可以满足更复杂的业务需求。

纠错
反馈