2016-08-08 3 views
1

Ich versuche, Informationen zu einer Aggregation in Elasticsearch zu erhalten.Elasticsearch Größe der Aggregationsbuckel abrufen (Anzahl der Elemente im Bucket), ohne alle Daten abzurufen

Ich habe einen Index, in dem ich E-Mail-Metadaten speichern (Sender IP, Betreff usw.) Was ich versuche zu tun ist, ich möchte die Anzahl der IPs, die über 1000 Mails senden. (So ​​zum Beispiel sagen wir, wir haben drei IP-Adressen, 2000 Mails von ersten IP gesendet werden, 1500 von zweiten und 200 von der dritten IP. Dann möchte ich als Aggregations Ergebnis sehen.) ich schrieb die folgende Abfrage:

GET /my_index/_search 
{ 
    "size": 0, 
    "aggs": { 
     "ipAddresses": { 
     "terms": { 
      "field": "senderIpAddress", 
      "min_doc_count": 1000, 
      "size" : 0 
     } 
     } 

    } 
} 

ich kann den Eimer bekommen und seine Größe in meinem back-End-Implementierung berechnen, jedoch muss ich alle Daten in den Eimer, um dies zu tun bekommen. Es ist langsam und ich möchte die Bucket-Größe bekommen, ohne alle Daten zu bekommen.

TL; DR, wie kann ich die Gesamtgröße des Aggregation-Buckets ermitteln, ohne die gesamten Daten abzurufen?

+0

Ich habe das genaue Problem jetzt. Haben Sie eine Lösung? – LLS

Antwort

0

Dies ist der Zweck der cardinality Aggregation:

{ 
"size": 0, 
"aggs": { 
    "ipAddressesCount": { 
     "cardinality": { 
      "field": "senderIpAddress" 
     } 
    } 
    } 
} 

Beachten Sie, dass es sich um eine Annäherung ist - die Genauigkeit kann mit precision_threshold in dem obigen Link als dokumentiert konfiguriert werden.

+0

Ich weiß, was eine Kardinalitätsaggregation ist. Wenn Sie aufmerksam lesen, was ich erwähnt habe, möchte ich die Anzahl der IP-Adressen sehen, von denen mehr als 1000 Mails gesendet werden. Wenn ich nur eine einfache Kardinalität mache, dann zählen wir am Ende des Tages die IP-Adressen, von denen weniger als 1000 Mails gesendet werden. – user2604150

Verwandte Themen