| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | [[search-aggregations-metrics-max-aggregation]]=== Max AggregationA `single-value` metrics aggregation that keeps track and returns the maximumvalue among the numeric values extracted from the aggregated documents. Thesevalues can be extracted either from specific numeric fields in the documents,or be generated by a provided script.NOTE: The `min` and `max` aggregation operate on the `double` representation ofthe data. As a consequence, the result may be approximate when running on longswhose absolute value is greater than +2^53+.Computing the max price value across all documents[source,console]--------------------------------------------------POST /sales/_search?size=0{    "aggs" : {        "max_price" : { "max" : { "field" : "price" } }    }}--------------------------------------------------// TEST[setup:sales]Response:[source,console-result]--------------------------------------------------{    ...    "aggregations": {        "max_price": {            "value": 200.0        }    }}--------------------------------------------------// TESTRESPONSE[s/\.\.\./"took": $body.took,"timed_out": false,"_shards": $body._shards,"hits": $body.hits,/]As can be seen, the name of the aggregation (`max_price` above) also serves asthe key by which the aggregation result can be retrieved from the returnedresponse.==== ScriptThe `max` aggregation can also calculate the maximum of a script. The examplebelow computes the maximum price:[source,console]--------------------------------------------------POST /sales/_search{    "aggs" : {        "max_price" : {            "max" : {                "script" : {                    "source" : "doc.price.value"                }            }        }    }}--------------------------------------------------// TEST[setup:sales]This will use the <<modules-scripting-painless, Painless>> scripting languageand no script parameters. To use a stored script use the following syntax:[source,console]--------------------------------------------------POST /sales/_search{    "aggs" : {        "max_price" : {            "max" : {                "script" : {                    "id": "my_script",                    "params": {                        "field": "price"                    }                }            }        }    }}--------------------------------------------------// TEST[setup:sales,stored_example_script]==== Value ScriptLet's say that the prices of the documents in our index are in USD, but wewould like to compute the max in EURO (and for the sake of this example, let'ssay the conversion rate is 1.2). We can use a value script to apply theconversion rate to every value before it is aggregated:[source,console]--------------------------------------------------POST /sales/_search{    "aggs" : {        "max_price_in_euros" : {            "max" : {                "field" : "price",                "script" : {                    "source" : "_value * params.conversion_rate",                    "params" : {                        "conversion_rate" : 1.2                    }                }            }        }    }}--------------------------------------------------// TEST[setup:sales]==== Missing valueThe `missing` parameter defines how documents that are missing a value shouldbe treated. By default they will be ignored but it is also possible to treatthem as if they had a value.[source,console]--------------------------------------------------POST /sales/_search{    "aggs" : {        "grade_max" : {            "max" : {                "field" : "grade",                "missing": 10 <1>            }        }    }}--------------------------------------------------// TEST[setup:sales]<1> Documents without a value in the `grade` field will fall into the samebucket as documents that have the value `10`.
 |