多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 最大值聚合 最大值聚合是一个单值度量聚合,用来记录和返回从聚合的文档中提取出的数字型值中的最大值。这些值可以从文档中的特定数字类型的字段提取,也可以通过脚本生成。 提示:最小值聚合和最大值聚合以数据的双重表示方式进行操作。 因此,如果在绝对值大于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。