max 聚合

single-value(单值) 度量聚合,跟踪并返回从聚合文档中提取的数值的最大值。 这些值可以从文档中指定的 numeric 字段中提取,也可以由提供的脚本生成。

minmax 聚合对数据以 double(双精度) 进行操作。 因此,在绝对值大于 2^53 的长整型上运行时,结果可能是近似的。

计算所有文档的最高价格(max_price):

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

响应:

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

可以看到,聚合的名称(上面的max_price)也作为键,通过它可以从返回的响应中检索聚合结果。

脚本(script)

max 聚合还可以计算脚本的最大值。以下示例计算最高价格:

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

这将使用 painless(无痛) 脚本语言,没有脚本参数。 要使用存储的脚本,请使用以下语法:

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

值脚本 (Value Script)

假设索引中的文档价格以美元为单位,但是我们想以欧元计算最大值(这个例子中,假设兑换率是1.2)。 我们可以使用值脚本,在汇总每个值之前对其应用转换率(conversion_rate):

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

缺失的值

参数 missing 定义应该如何处理有缺失值的文档。 默认情况下,它们将被忽略,但也可以将它们视为有一个值。

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

grade 字段没有值的文档将与值为10的文档落入同一个桶中。