Elasticsearch 中 Bucket 聚合有哪些?

推荐答案

在 Elasticsearch 中,Bucket 聚合是一种将文档分组到不同“桶”中的聚合方式。常见的 Bucket 聚合包括:

  1. Terms Aggregation:根据字段的唯一值进行分组。
  2. Range Aggregation:根据数值范围进行分组。
  3. Date Range Aggregation:根据日期范围进行分组。
  4. Histogram Aggregation:根据数值间隔进行分组。
  5. Date Histogram Aggregation:根据日期间隔进行分组。
  6. Geo Distance Aggregation:根据地理位置距离进行分组。
  7. IP Range Aggregation:根据 IP 地址范围进行分组。
  8. Nested Aggregation:用于嵌套文档的聚合。
  9. Reverse Nested Aggregation:用于从嵌套文档返回到父文档的聚合。
  10. Children Aggregation:用于父子文档关系的聚合。
  11. Significant Terms Aggregation:用于识别显著项的聚合。
  12. Filters Aggregation:根据多个过滤器进行分组。
  13. Sampler Aggregation:用于对文档进行采样后再聚合。

本题详细解读

Terms Aggregation

Terms Aggregation 是最常用的 Bucket 聚合之一,它根据字段的唯一值将文档分组。例如,可以根据“category”字段的值将商品文档分组。

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

Range Aggregation

Range Aggregation 允许你根据数值范围将文档分组。例如,可以根据“price”字段的值将商品文档分组到不同的价格区间。

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

Date Range Aggregation

Date Range Aggregation 类似于 Range Aggregation,但它是根据日期范围进行分组。例如,可以根据“date”字段的值将日志文档分组到不同的日期区间。

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

Histogram Aggregation

Histogram Aggregation 根据数值间隔将文档分组。例如,可以根据“age”字段的值将用户文档分组到不同的年龄区间。

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

Date Histogram Aggregation

Date Histogram Aggregation 根据日期间隔将文档分组。例如,可以根据“timestamp”字段的值将日志文档分组到不同的时间区间。

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

Geo Distance Aggregation

Geo Distance Aggregation 根据地理位置距离将文档分组。例如,可以根据用户的位置与某个中心点的距离将用户文档分组。

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

IP Range Aggregation

IP Range Aggregation 根据 IP 地址范围将文档分组。例如,可以根据“ip”字段的值将访问日志分组到不同的 IP 地址区间。

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

Nested Aggregation

Nested Aggregation 用于嵌套文档的聚合。例如,可以在嵌套的“comments”字段上进行聚合。

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

Reverse Nested Aggregation

Reverse Nested Aggregation 用于从嵌套文档返回到父文档的聚合。例如,可以在嵌套的“comments”字段上进行聚合后,再返回到父文档进行进一步聚合。

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

Children Aggregation

Children Aggregation 用于父子文档关系的聚合。例如,可以在“parent”和“child”文档之间进行聚合。

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

Significant Terms Aggregation

Significant Terms Aggregation 用于识别显著项的聚合。例如,可以识别出某个字段中显著出现的值。

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

Filters Aggregation

Filters Aggregation 根据多个过滤器将文档分组。例如,可以根据不同的过滤器将文档分组到不同的桶中。

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

Sampler Aggregation

Sampler Aggregation 用于对文档进行采样后再聚合。例如,可以先对文档进行采样,然后再对采样后的文档进行聚合。

-- -------------------- ---- -------
-
  ------- -
    --------- -
      ---------- -
        ------------- ---
      --
      ------- -
        -------- -
          -------- -
            -------- ------------------
          -
        -
      -
    -
  -
-
纠错
反馈