-
Aivaras Gotovskis authoredAivaras Gotovskis authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
index.md 3.03 KiB
Aggregation
Objective aggregation builder represents all available Elasticsearch aggregations.
To form an aggregation you have to create Search
object. See below an example of min aggregation usage.
$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.
{
"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"
}
}
}
}
$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();