# 最大值聚合

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-aggregations-metrics-max-aggregation.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-aggregations-metrics-max-aggregation.html)

译文链接 : [最大值聚合](/pages/viewpage.action?pageId=9405826)

贡献者 : @wangxiang，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

最大值聚合是一个单值度量聚合，用来记录和返回从聚合的文档中提取出的数字型值中的最大值。这些值可以从文档中的特定数字类型的字段提取，也可以通过脚本生成。

提示：最小值聚合和最大值聚合以数据的双重表示方式进行操作。 因此，如果在绝对值大于2 ^ 53的long类型的字段上运行最大值聚合或者最小值聚合，结果可能是近似值。

计算所有文档中价格最高的文档：

```
POST /sales/_search?size=0
{
    "aggs" : {
        "max_price" : { "max" : { "field" : "price" } }
    }
}
```

返回值：

```
{
    ...
    "aggregations": {
        "max_price": {
            "value": 200.0
        }
    }
}
```

可以看出，可以以聚合的名称（max_price）作为关键字从返回的结果中查询出聚合的结果。

## script

最大值聚合也可以通过脚本来计算，下面是一个计算最高价格的脚本的例子：

```
POST /sales/_search
{
    "aggs" : {
        "max_price" : {
            "max" : {
                "script" : {
                    "inline" : "doc.price.value"
                }
            }
        }
    }
}
```

这会使用[Painless](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting-painless.html "Painless Scripting Language") 脚本语言，而且这个脚本没有参数。如果想使用脚本文件，用下面的这种方式：

```
POST /sales/_search
{
    "aggs" : {
        "max_price" : {
            "max" : {
                "script" : {
                    "file": "my_script",
                    "params": {
                        "field": "price"
                    }
                }
            }
        }
    }
}
```

提示：索引脚本只需要将file参数替换为id参数。

## Value Script

比如index中的文档里的价格是以美元为单位的，但是我们现在想获得欧元的最大值（在这里假设汇率是1.2）。我们可以使用value script在聚合前来来实现每个值的汇率转化：

```
POST /sales/_search 
{ 
	"aggs" : { 
		"max_price_in_euros" : { 
			"max" : { 
				"field" : "price", 
				"script" : { 
					"inline" : "_value * params.conversion_rate", 
					"params" : { 
						"conversion_rate" : 1.2 
					} 
				} 
			} 
		} 
	} 
}
```

## Missing Value

missing参数定义了如何处理缺少值的文档。 默认情况下如果没有指定的字段，这种文档将被忽略，但也可以认为它们具有指定的值。

```
POST /sales/_search 
{ 
	"aggs" : { 
		"grade_max" : { 
			"max" : { 
				"field" : "grade", 
				"missing": 10  
			} 
		} 
	} 
}
```

注释1:文档中如果没有grade这个字段，则认为该字段的值是10。