2017-07-17 130 views
0

我想获得子聚合的总和。例如,我通过智能手机进行分组,然后按运营商分组,然后按该运营商的平均价格进行分组。我想为特定智能手机获得所有运营商的所有价格的总和。所以基本上,我想是这样的:获取总和子聚合

{ 
    "aggs": { 
    "group_by_smartphones": { 
     "terms": { 
     "field": "smartphone", 
     "order": { 
      "_term": "asc" 
     }, 
     "size": 200 
     }, 
     "aggs": { 
     "group_by_sum": { 
      "sum": { 
      "field": "price" 
      }, 
      "aggs": { 
      "group_by_carrier": { 
       "terms": { 
       "field": "carrier", 
       "order": { 
        "group_by_avg": "desc" 
       } 
       }, 
       "aggs": { 
       "group_by_avg": { 
        "avg": { 
        "field": "price" 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

除此之外,当我不喜欢这样,我得到这个错误:

"type": "aggregation_initialization_exception", "reason": "Aggregator [group_by_sum] of type [sum] cannot accept sub-aggregations"

如何解决它,所以我可以得到所有价格的总和为每个智能手机?

回答

1

就快,其实sumgroup_by_carrier子聚合都必须在同一水平:

{ 
    "aggs": { 
    "group_by_smartphones": { 
     "terms": { 
     "field": "smartphone", 
     "order": { 
      "_term": "asc" 
     }, 
     "size": 200 
     }, 
     "aggs": { 
     "sum_prices": { 
      "sum": { 
      "field": "price" 
      } 
     }, 
     "group_by_carrier": { 
      "terms": { 
      "field": "carrier", 
      "order": { 
       "group_by_avg": "desc" 
      } 
      }, 
      "aggs": { 
      "group_by_avg": { 
       "avg": { 
       "field": "price" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
}