最大值聚合(Max Aggregation)
最大值聚合是一个单值度量聚合,用来记录和返回从聚合的文档中提取出的数字型值中的最大值。这些值可以从文档中的特定数字类型的字段提取,也可以通过脚本生成。
提示:最小值聚合和最大值聚合以数据的双重表示方式进行操作。 因此,如果在绝对值大于2 ^ 53的long类型的字段上运行最大值聚合或者最小值聚合,结果可能是近似值。
计算所有文档中价格最高的文档:
1
POST /sales/_search?size=0
2
{
3
"aggs" : {
4
"max_price" : { "max" : { "field" : "price" } }
5
}
6
}
Copied!
返回值:
1
{
2
...
3
"aggregations": {
4
"max_price": {
5
"value": 200.0
6
}
7
}
8
}
Copied!
可以看出,可以以聚合的名称(max_price)作为关键字从返回的结果中查询出聚合的结果。

script

最大值聚合也可以通过脚本来计算,下面是一个计算最高价格的脚本的例子:
1
POST /sales/_search
2
{
3
"aggs" : {
4
"max_price" : {
5
"max" : {
6
"script" : {
7
"inline" : "doc.price.value"
8
}
9
}
10
}
11
}
12
}
Copied!
这会使用Painless 脚本语言,而且这个脚本没有参数。如果想使用脚本文件,用下面的这种方式:
1
POST /sales/_search
2
{
3
"aggs" : {
4
"max_price" : {
5
"max" : {
6
"script" : {
7
"file": "my_script",
8
"params": {
9
"field": "price"
10
}
11
}
12
}
13
}
14
}
15
}
Copied!
提示:索引脚本只需要将file参数替换为id参数。

Value Script

比如index中的文档里的价格是以美元为单位的,但是我们现在想获得欧元的最大值(在这里假设汇率是1.2)。我们可以使用value script在聚合前来来实现每个值的汇率转化:
1
POST /sales/_search
2
{
3
"aggs" : {
4
"max_price_in_euros" : {
5
"max" : {
6
"field" : "price",
7
"script" : {
8
"inline" : "_value * params.conversion_rate",
9
"params" : {
10
"conversion_rate" : 1.2
11
}
12
}
13
}
14
}
15
}
16
}
Copied!

Missing Value

missing参数定义了如何处理缺少值的文档。 默认情况下如果没有指定的字段,这种文档将被忽略,但也可以认为它们具有指定的值。
1
POST /sales/_search
2
{
3
"aggs" : {
4
"grade_max" : {
5
"max" : {
6
"field" : "grade",
7
"missing": 10 # 1
8
}
9
}
10
}
11
}
Copied!
1
文档中如果没有grade这个字段,则认为该字段的值是10。
Last modified 2yr ago