2017-04-11 291 views
0
{ 
    "aggs": { 
    "by_countryCode": { 
     "terms": { 
      "field":"countryCode.keyword", 
      "size": 100 
     }, 
     "aggs": { 
     "views": {"sum": {"field": "views"}}, 
     "shares": {"sum": {"field": "shares"}} 
     } 
    } 
    }, 
    "query": { 
    "bool": { 
    "must": [ 
     { "match": { "userId": 1 } }, 
     { "match": { "artistId": 1001 }}, 
     { "range": { 
     "date" : { 
      "gte" : "20170310", 
      "lte" : "20170312" 
     } 
     } 
     } 
    ] 
    } 

    } 
} 

这将返回匹配的项目,也给我的聚合结果。聚合是国家代码中视图和份额组的总和。Elasticsearch聚合或多重聚合

但我想要另一个总和聚合。我也想要“总数”和“总份额”,我怎么能这样做?

谢谢!

回答

1

在最顶层添加两个额外的聚合应该这样做:

{ 
    "aggs": { 
    "by_countryCode": { 
     "terms": { 
      "field":"countryCode.keyword", 
      "size": 100 
     }, 
     "aggs": { 
     "views": {"sum": {"field": "views"}}, 
     "shares": {"sum": {"field": "shares"}} 
     } 
    }, 
    "total_views": { 
     {"sum": {"field": "views"}} 
    }, 
    "total_shares": { 
     {"sum": {"field": "shares"}} 
    }, 
    "query": { 
    "bool": { 
    "must": [ 
     { "match": { "userId": 1 } }, 
     { "match": { "artistId": 1001 }}, 
     { "range": { 
     "date" : { 
      "gte" : "20170310", 
      "lte" : "20170312" 
     } 
     } 
     } 
    ] 
    } 

    } 
} 
0
{ 
    "aggs": { 
    "by_countryCode": { 
     "terms": { 
      "field":"countryCode.keyword", 
      "size": 100 
     }, 
     "aggs": { 
     "views": {"sum": {"field": "views"}}, 
     "shares": {"sum": {"field": "shares"}} 
     } 
    }, 
    "total_views": { 
    "sum": {"field": "views"} 
    }, 
    "total_shares": { 
    "sum": {"field": "shares"} 
    } 

    }, 
    "query": { 
    "bool": { 
    "must": [ 
     { "match": { "userId": 1 } }, 
     { "match": { "artistId": 1001 }}, 
     { "range": { 
     "date" : { 
      "gte" : "20170310", 
      "lte" : "20170312" 
     } 
     } 
     } 
    ] 
    } 

    } 
} 

谢谢,罗马!

在你的代码的帮助下,我做了一些小的改变。有用!