[[painless-metric-agg-map-context]]
=== Metric aggregation map context

Use a Painless script to
{ref}/search-aggregations-metrics-scripted-metric-aggregation.html[map]
values for use in a scripted metric aggregation. A map script is run once per
collected document following an optional
<<painless-metric-agg-init-context, initialization script>> and is required as
part of a full metric aggregation.

*Variables*

`params` (`Map`, read-only)::
        User-defined parameters passed in as part of the query.

`state` (`Map`)::
        `Map` used to add values for processing in a
        <<painless-metric-agg-map-context, combine script>> or to be returned from the aggregation.

`doc` (`Map`, read-only)::
        Contains the fields of the current document where each field is a
        `List` of values.

`_score` (`double` read-only)::
        The similarity score of the current document.

*Side Effects*

`state` (`Map`)::
        Use this `Map` to add values for processing in a combine script.
        Additional values must be of the type `Map`, `List`, `String` or
        primitive. The same `state` `Map` is shared between all aggregated documents
        on a given shard. If an initialization script is provided as part of the
        aggregation then values added from the initialization script are
        available.  If no combine script is specified, values must be
        directly stored in `state` in a usable form. If no combine script and no
        <<painless-metric-agg-reduce-context, reduce script>> are specified, the
        `state` values are used as the result.

*Return*

`void`::
        No expected return value.

*API*

The standard <<painless-api-reference, Painless API>> is available.