直方图聚合(Histogram)

直方图聚合 #

histogram 聚合根据指定的间隔对文档进行分组。

使用 histogram 聚合,您可以非常轻松地可视化给定范围内文档中值的分布。

相关指南(先读这些) #

以下示例将 number_of_bytes 字段按 10,000 个间隔进行分组:

GET sample_data_logs/_search
{
  "size": 0,
  "aggs": {
    "number_of_bytes": {
      "histogram": {
        "field": "bytes",
        "interval": 10000
      }
    }
  }
}

返回内容

...
"aggregations" : {
  "number_of_bytes" : {
    "buckets" : [
      {
        "key" : 0.0,
        "doc_count" : 13372
      },
      {
        "key" : 10000.0,
        "doc_count" : 702
      }
    ]
  }
 }

参数说明 #

histogram 聚合支持以下参数。

参数必需/可选数据类型描述
interval必填Numeric构造每个分组所使用的字段值宽度。
min_doc_count可选Integer桶中至少需要包含的文档数量才会出现在结果中。默认为 0,设为 1 可隐藏空桶。
offset可选Numeric桶边界的偏移量。例如 interval=10,offset=5 时桶为 [5,15)、[15,25)…。默认为 0。
extended_bounds可选Object包含 minmax,强制直方图覆盖指定范围(即使没有数据)。不会过滤文档。
hard_bounds可选Object包含 minmax,限制直方图的范围,超出范围的桶会被丢弃。
order可选Object桶的排序方式。默认按 key 升序。
keyed可选Boolean若为 true,以键值对而非数组形式返回结果。默认为 false

显示空桶 #

设置 min_doc_count0 会返回所有桶(包括没有文档的桶),配合 extended_bounds 可以强制覆盖完整范围:

GET sample_data_logs/_search
{
  "size": 0,
  "aggs": {
    "bytes_distribution": {
      "histogram": {
        "field": "bytes",
        "interval": 5000,
        "min_doc_count": 0,
        "extended_bounds": {
          "min": 0,
          "max": 20000
        }
      }
    }
  }
}

嵌套子聚合 #

直方图聚合的每个桶内都可以嵌套子聚合。例如,查看每个字节范围桶中的平均响应时间:

GET sample_data_logs/_search
{
  "size": 0,
  "aggs": {
    "bytes_ranges": {
      "histogram": {
        "field": "bytes",
        "interval": 5000
      },
      "aggs": {
        "avg_response": {
          "avg": {
            "field": "response_time"
          }
        }
      }
    }
  }
}