Elasticsearch 中如何进行直方图聚合?

推荐答案

在 Elasticsearch 中,直方图聚合(Histogram Aggregation)用于将数值字段的值按照指定的间隔进行分组,生成直方图。以下是一个简单的示例:

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

在这个示例中,price 字段的值将按照 50 的间隔进行分组,生成一个直方图。

本题详细解读

直方图聚合的基本概念

直方图聚合是一种基于数值字段的聚合方式,它将数值字段的值按照指定的间隔(interval)进行分组。每个分组称为一个“桶”(bucket),每个桶包含一定范围内的数值。

直方图聚合的参数

  • field:指定要进行聚合的数值字段。
  • interval:指定分组的间隔。例如,interval 为 50 时,数值将被分组为 0-50、50-100、100-150 等。
  • min_doc_count:可选参数,指定每个桶中至少包含的文档数量。如果某个桶中的文档数量少于该值,则该桶将被忽略。
  • extended_bounds:可选参数,指定直方图的范围。即使没有数据,也会生成指定范围内的桶。

示例解析

-- -------------------- ---- -------
-
  ------- --
  ------- -
    ------------------ -
      ------------ -
        -------- --------
        ----------- --
      -
    -
  -
-
  • size: 0:表示不返回具体的文档,只返回聚合结果。
  • aggs:定义聚合操作。
  • price_histogram:聚合的名称,可以自定义。
  • histogram:指定使用直方图聚合。
  • field: "price":指定对 price 字段进行聚合。
  • interval: 50:指定分组的间隔为 50。

返回结果

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

-- -------------------- ---- -------
-
  --------------- -
    ------------------ -
      ---------- -
        -
          ------ --
          ------------ --
        --
        -
          ------ ---
          ------------ --
        --
        -
          ------ ----
          ------------ --
        -
      -
    -
  -
-
  • buckets:包含所有分组的桶。
  • key:表示每个桶的起始值。
  • doc_count:表示该桶中包含的文档数量。

通过直方图聚合,可以方便地对数值字段进行分组统计,生成直方图数据。

纠错
反馈