范围聚合(Range Aggregation)

A multi-bucket value source based aggregation that enables the user to define a set of ranges-每个代表一个bucket。在聚合过程中,从每个文件中提取的值将根据每个存储区范围进行检查,并对相关/匹配文档进行“bucket”,值得注意的是,注意,此聚合包含了from值,不包括每个范围的to的值。

例子:

{
    "aggs" : {
        "price_ranges" : {
            "range" : {
                "field" : "price",
                "ranges" : [
                    { "to" : 50 },
                    { "from" : 50, "to" : 100 },
                    { "from" : 100 }
                ]
            }
        }
    }
}

响应结果:

{
    ...

    "aggregations": {
        "price_ranges" : {
            "buckets": [
                {
                    "to": 50,
                    "doc_count": 2
                },
                {
                    "from": 50,
                    "to": 100,
                    "doc_count": 4
                },
                {
                    "from": 100,
                    "doc_count": 4
                }
            ]
        }
    }
}

Keyed Response

将keyed标志设置为true会将一个惟一的字符串键与每个bucket关联起来,并将范围作为散列而不是数组返回:

响应结果:

可以为每个范围自定义key:

Script

这将把script参数解释为具有painless脚本语言和no script参数的inline脚本。要使用文件脚本,请使用以下语法

对于索引脚本,用id参数替换file参数。

Value Script

假设产品价格是美元,但我们希望得到欧元的价格区间,我们可以使用value script在聚合之前转换价格(假设汇率是0.8)

Sub Aggregations

下面的示例不仅将文档“bucket”到不同的bucket,而且计算每个价格范围内的价格统计

响应结果:

如果sub aggregation(子集合)也基于与范围聚合相同的值(如上例中的统计信息聚合),则可以省略其值的定义。以下内容将返回与上述相同的结果

#1 我们不需要指定price,因为我们默认从父范围聚合“继承”它

Last updated

Was this helpful?