2016-07-05 18 views
5

Mam dane w następujący sposób:ElasticSearch Agregacja nad hity

{"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"} 

Aby uzyskać dokumentację do konkretnego celu użytkownika według daty (malejąco) użyłem Top Hits jak poniżej:

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

wynikiem powyższego zapytania jest następująca:

{"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"} 

teraz chcę do agregowania to dalej tak, że wynik jest w następujący sposób:

{"sum_of_different_buckets": 4} 

Ale nie wiem, jak SUM pole „docs” wartość od wyniku uzyskanego powyżej.

+0

Nie rozumiem, co chcesz osiągnąć. Podsumowując, która docenia wartości? Jak powinien wyglądać wynik? –

+0

Edytowałem pytanie, sprawdź teraz. Zasadniczo potrzebuję jeszcze jednego poziomu agregacji poza agregacją Top Hits, dzięki czemu mam sumę pól "docs". – SuperCoder

+0

Nie sądzę, że jest to możliwe, ponieważ chcesz używać danych wyjściowych top_hits, a ta agregacja nie może być później użyta w innych agregacjach. Nie możesz po prostu zrobić sumy we własnym kodzie/aplikacji? –

Odpowiedz

0

Możesz także zagregować zagregowane agregacje wewnątrz agregacji w dowolny sposób, aby wyodrębnić ze swoich danych sumaryczne dane. Może być poniżej przykładowych prac.

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