# 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.

## 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