When executing a aggregation using nested objects, I get the following error when sorting on a metric:
Sub-path [nested] points to non single-bucket aggregation.
According to ElasticSearch 2.2 NestedAggregation, a nested aggregation actually is single-bucket.
Source for aggregation validation that is throwing this error can be found at:
aggregations/support/AggregationPath.java
Query
{
"aggregations": {
"titleGroup": {
"terms": {
"field": "documenTitle",
"order": {
"nested > cardinality": "desc"
}
},
"aggregations": {
"nested": {
"nested": {
"path": "nested_object"
},
"aggregations": {
"cardinality": {
"cardinality": {
"field": "nested_object.hash"
}
}
}}}}}}
Error
{
"error": {
"root_cause": [
{
"type": "aggregation_execution_exception",
"reason": "Invalid terms aggregation order path [nested>cardinality]. Terms buckets can only be sorted on a sub-aggregator path that is built out of zero or more single-bucket aggregations within the path and a final single-bucket or a metrics aggregation at the path end. Sub-path [nested] points to non single-bucket aggregation"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "bitsensor",
"node": "7uApA39rQOGMX4soKZQung",
"reason": {
"type": "aggregation_execution_exception",
"reason": "Invalid terms aggregation order path [nested>cardinality]. Terms buckets can only be sorted on a sub-aggregator path that is built out of zero or more single-bucket aggregations within the path and a final single-bucket or a metrics aggregation at the path end. Sub-path [nested] points to non single-bucket aggregation"
}
}
]
},
"status": 500
}
Mapping
{
"properties": {
"documenTitle": {"type":"string"},
"nested_object": {
"type": "nested",
"properties": {
"hash": {
"type": "long"
}}}}}