2016-07-05 66 views
5

我有数据如下:ElasticSearch聚集在排名靠前的

{"action":"CREATE","docs":1,"date":"2016 Jun 26 12:00:12","userid":"1234"} 
{"action":"REPLACE","docs":2,"date":"2016 Jun 27 12:00:12","userid":"1234"} 
{"action":"REPLACE","docs":1,"date":"2016 Jun 27 13:00:12","userid":"1234"} 
{"action":"CREATE","docs":1,"date":"2016 Jun 28 12:00:12","userid":"3431"} 
{"action":"REPLACE","docs":2,"date":"2016 Jun 28 13:00:12","userid":"3431"} 
{"action":"CREATE","docs":1,"date":"2016 Jun 29 12:00:12","userid":"9999"} 

按日期得到记录每一个独特的用户顺序(降序),我使用的排名靠前的像下面这样:

"aggs": { 
      "user_bucket": { 
       "terms": { 
        "field": "userid" 
       }, 
       "aggs": { 
        "user_latest_count": { 
         "top_hits": { 
          "size": 1, 
          "sort": [ 
           { 
            "data": { 
             "order": "desc" 
            } 
           } 
          ], 
          "_source": { 
           "include": [ 
            "docs" 
           ] 
          } 
         } 
        } 
       } 
      } 
     } 

上述查询的结果如下:

{"action":"REPLACE","docs":1,"date":"2016 Jun 27 13:00:12","userid":"1234"} 
{"action":"REPLACE","docs":2,"date":"2016 Jun 28 13:00:12","userid":"3431"} 
{"action":"CREATE","docs":1,"date":"2016 Jun 29 12:00:12","userid":"9999"} 

现在,我想进一步聚集会这样的结果是如下:

{"sum_of_different_buckets": 4} 

但不知道如何SUM领域的“文档”从上面获得的结果值。

+0

我不明白你想达到什么目的。总结哪些文档值?结果应该如何? –

+0

我编辑了这个问题,请现在检查。基本上我需要比Top Hits聚合更高一级的聚合,这样我才能得到字段“docs”的总和。 – SuperCoder

+0

我不认为这是可能的,因为你想使用top_hits的输出,并且此后的聚合不能用于其他聚合。难道你不能只在你自己的代码/应用程序中完成总和吗? –

回答

0

您还可以在聚合内任意嵌套聚合,以从数据中提取所需的汇总数据。可能低于样本作品。

"aggs" : { 
    "sum_of_different_buckets" : { "sum" : { "field" : "docs" } } 
}