推荐答案
在 Elasticsearch 中,直方图聚合(Histogram Aggregation)用于将数值字段的值按照指定的间隔进行分组,生成直方图。以下是一个简单的示例:
// www.javascriptcn.com code example
{
"size": 0,
"aggs": {
"price_histogram": {
"histogram": {
"field": "price",
"interval": 50
}
}
}
}在这个示例中,price 字段的值将按照 50 的间隔进行分组,生成一个直方图。
本题详细解读
直方图聚合的基本概念
直方图聚合是一种基于数值字段的聚合方式,它将数值字段的值按照指定的间隔(interval)进行分组。每个分组称为一个“桶”(bucket),每个桶包含一定范围内的数值。
直方图聚合的参数
field:指定要进行聚合的数值字段。interval:指定分组的间隔。例如,interval为 50 时,数值将被分组为 0-50、50-100、100-150 等。min_doc_count:可选参数,指定每个桶中至少包含的文档数量。如果某个桶中的文档数量少于该值,则该桶将被忽略。extended_bounds:可选参数,指定直方图的范围。即使没有数据,也会生成指定范围内的桶。
示例解析
// www.javascriptcn.com code example
{
"size": 0,
"aggs": {
"price_histogram": {
"histogram": {
"field": "price",
"interval": 50
}
}
}
}size: 0:表示不返回具体的文档,只返回聚合结果。aggs:定义聚合操作。price_histogram:聚合的名称,可以自定义。histogram:指定使用直方图聚合。field: "price":指定对price字段进行聚合。interval: 50:指定分组的间隔为 50。
返回结果
执行上述查询后,Elasticsearch 将返回类似如下的结果:
// www.javascriptcn.com code example
{
"aggregations": {
"price_histogram": {
"buckets": [
{
"key": 0,
"doc_count": 10
},
{
"key": 50,
"doc_count": 15
},
{
"key": 100,
"doc_count": 20
}
]
}
}
}buckets:包含所有分组的桶。key:表示每个桶的起始值。doc_count:表示该桶中包含的文档数量。
通过直方图聚合,可以方便地对数值字段进行分组统计,生成直方图数据。