Filter Aggregation
More info about filter aggregation is in the official elasticsearch docs
Defines a single bucket of all the documents in the current document set context that match a specified filter. Often this will be used to narrow down the current aggregation context to a specific set of documents.
Simple example
{
"aggregations" : {
"grades_stats" : {
"filter" : { "term": { "color": "red" } },
"aggregations" : {
"avg_price" : { "avg" : { "field" : "price" } }
}
}
}
}
And now the query via DSL:
$termFilter = new TermQuery('color', 'red');
$avgAggregation = new AvgAggregation('avg_price', 'price');
$filterAggregation = new FilterAggregation('grades_stats', $termFilter);
$filterAggregation->addAggregation($avgAggregation);
$search = new Search();
$search->addAggregation($filterAggregation);
$queryArray = $search->toArray();