# Aggregation Objective aggregation builder represents all available [Elasticsearch aggregations][1]. To form an aggregation you have to create `Search` object. See below an example of min aggregation usage. ```php $search = new Search(); $minAggregation = new MinAggregation('min_agg'); $minAggregation->setField('price'); $search->addAggregation($minAggregation); $queryArray = $search->toArray(); ``` There are 2 types of aggregation: bucketing and metric. The only difference in using them is that metric bucketing aggregations supports nesting while metric aggregations will ignore any set nested aggregations. ## Nesting aggregations Bucketing aggregation can have any number nested aggregations and nesting can go to unlimited depth. Example nested aggregation. ```JSON { "aggregations": { "agg_color": { "terms": { "field": "color" }, "aggregations": { "agg_avg_price": { "avg": { "field": "price" } }, "agg_brand": { "terms": { "field": "brand" }, "aggregations": { "agg_avg_price": { "avg": { "field": "price" } } } } } }, "agg_avg_price": { "avg": { "field": "price" } } } } ``` ```php $avgPriceAggregation = new AvgAggregation('avg_price'); $avgPriceAggregation->setField('price'); $brandTermAggregation = new TermsAggregation('brand'); $brandTermAggregation->setField('brand'); $brandTermAggregation->addAggregation($avgPriceAggregation); $colorTermsAggregation = new TermsAggregation('color'); $colorTermsAggregation->setField('color'); $colorTermsAggregation->addAggregation($avgPriceAggregation); $colorTermsAggregation->addAggregation($brandTermAggregation); $search = new Search(); $search->addAggregation($colorTermsAggregation); $search->addAggregation($avgPriceAggregation); $queryArray = $search->toArray(); ``` ## Metric Aggregations - [Avg](Avg.md) - [Cardinality](Cardinality.md) - [ExtendedStats](ExtendedStats.md) - [Max](Max.md) - [Min](Min.md) - [PercentileRanks](PercentileRanks.md) - [Percentiles](Percentiles.md) - [Stats](Stats.md) - [Sum](Sum.md) - [TopHits](TopHits.md) - [ValueCount](ValueCount.md) ## Bucketing Aggregations - [Children](Children.md) - [DateRange](DateRange.md) - [Filter](Filter.md) - [Filters](Filters.md) - [GeoBounds](GeoBounds.md) - [GeoDistance](GeoDistance.md) - [GeoHashGrid](GeoHashGrid.md) - [Global](Global.md) - [Histogram](Histogram.md) - [Ipv4Range](Ipv4Range.md) - [Missing](Missing.md) - [Nested](Nested.md) - [Range](Range.md) - [ReverseNested](ReverseNested.md) - [Terms](Terms.md) [1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html