Reverse Nested Aggregation
More info about reverse nested aggregation is in the official elasticsearch docs
A special single bucket aggregation that enables aggregating on parent docs from nested documents.
Simple example
{
"aggregations": {
"comments": {
"nested": {
"path": "comments"
},
"aggregations": {
"top_usernames": {
"terms": {
"field": "comments.username"
},
"aggregations": {
"comment_to_issue": {
"reverse_nested": {},
"aggregations": {
"top_tags_per_comment": {
"terms": {
"field": "tags"
}
}
}
}
}
}
}
}
}
}
And now the query via DSL:
$tagsTermsAggregations = new TermsAggregation('top_tags_per_comment', 'tags');
$reverseNestedAggregation = new ReverseNestedAggregation('comment_to_issue');
$reverseNestedAggregation->addAggregation($tagsTermsAggregations);
$usernameTermsAggregation = new TermsAggregation('top_usernames', 'comments.username');
$usernameTermsAggregation->addAggregation($reverseNestedAggregation);
$nestedAggregation = new NestedAggregation('comments', 'comments');
$nestedAggregation->addAggregation($usernameTermsAggregation);
$search = new Search();
$search->addAggregation($nestedAggregation);
$queryArray = $search->toArray();