| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | [[search-aggregations-bucket-nested-aggregation]]=== Nested AggregationA special single bucket aggregation that enables aggregating nested documents.For example, lets say we have an index of products, and each product holds the list of resellers - each having its ownprice for the product. The mapping could look like:[source,console,id=nested-aggregation-example]--------------------------------------------------PUT /products{    "mappings": {        "properties" : {            "resellers" : { <1>                "type" : "nested",                "properties" : {                    "reseller" : { "type" : "text" },                    "price" : { "type" : "double" }                }            }        }    }}--------------------------------------------------<1> `resellers` is an array that holds nested documents.The following request adds a product with two resellers:[source,console]--------------------------------------------------PUT /products/_doc/0{  "name": "LED TV", <1>  "resellers": [    {      "reseller": "companyA",      "price": 350    },    {      "reseller": "companyB",      "price": 500    }  ]}--------------------------------------------------// TEST[s/PUT \/products\/_doc\/0/PUT \/products\/_doc\/0\?refresh/]// TEST[continued]<1> We are using a dynamic mapping for the `name` attribute.The following request returns the minimum price a product can be purchased for:[source,console]--------------------------------------------------GET /products/_search{    "query" : {        "match" : { "name" : "led tv" }    },    "aggs" : {        "resellers" : {            "nested" : {                "path" : "resellers"            },            "aggs" : {                "min_price" : { "min" : { "field" : "resellers.price" } }            }        }    }}--------------------------------------------------// TEST[s/GET \/products\/_search/GET \/products\/_search\?filter_path=aggregations/]// TEST[continued]As you can see above, the nested aggregation requires the `path` of the nested documents within the top level documents.Then one can define any type of aggregation over these nested documents.Response:[source,console-result]--------------------------------------------------{  ...  "aggregations": {    "resellers": {      "doc_count": 2,      "min_price": {        "value": 350      }    }  }}--------------------------------------------------// TESTRESPONSE[s/\.\.\.//]// TESTRESPONSE[s/: [0-9]+/: $body.$_path/]
 |