2017-07-18 63 views
0

我有一个查询,我正在通过智能手机分组,然后由运营商进行分组。在这些嵌套聚合内部,我想找到该特定智能手机的每个运营商的平均价格,评级和速度。这是我当前的查询:获取多个平均聚合

{ 
    "aggs": { 
    "group_by_smartphone": { 
     "terms": { 
     "field": "smartphone" 
     }, 
     "aggs": { 
     "group_by_carrier": { 
      "terms": { 
      "field": "carrier" 
      }, 
      "aggs": { 
      "group_by_avg_price": { 
       "avg": { 
       "field": "price" 
       } 
      } 
      }, 

      "group_by_rating":{ 
       "avg":{ 
       "field": "rating" 
       } 
      } 

     } 
     } 
    } 
    } 
} 

按照目前的查询,我得到一个错误说:

“类型”:“parsing_exception”, “理由”:“发现了两个聚合类型[group_by_carrier]中的定义:[terms]和[group_by_rating]“,

我该如何解决这个问题,以便显示每个平均值的正确结果?

回答

1

试试这个:

{ 
    "aggs": { 
    "group_by_smartphone": { 
     "terms": { 
     "field": "smartphone" 
     }, 
     "aggs": { 
     "group_by_carrier": { 
      "terms": { 
      "field": "carrier" 
      }, 
      "aggs": { 
      "avg_price": { 
       "avg": { 
       "field": "price" 
       } 
      }, 
      "avg_rating":{ 
       "avg":{ 
       "field": "rating" 
       } 
      }, 
      "avg_speed":{ 
       "avg":{ 
       "field": "speed" 
       } 
      } 
      }  
     } 
     } 
    } 
    } 
} 

所有子聚合必须位于同一aggs结构内。

+0

如果你能看看这个,是否可能:https://stackoverflow.com/questions/45268131/finding-sum-of-average-sub-aggregations – user2896120