2016-03-22 14 views
0

Ich habe einen Typ in elasticsearch, wo jeder Benutzer eine beliebige Anzahl von Posts posten kann (Felder sind "userid" und "post"). Jetzt brauche ich die Anzahl der Benutzer, die 0 post, 1 post, 2 Beiträge und so weiter .... wie mache ich das? Ich denke, es müssen einige verschachtelte Aggregationen implementiert werden, aber ich weiß nicht, wie ich vorgehen soll. Danke im Voraus !verschachtelte Anzahl Aggregationen in elasticsearch

+2

Bitte teilen Sie die Zuordnung Ihres Index. 'GET/index/type/_mapping' – Richa

+1

Es wäre wahrscheinlich hilfreich, wenn Sie Ihr Mapping und ein oder zwei Beispieldokumente geteilt hätten. Auch welche Art von Abfrage Sie derzeit haben. – Val

+0

{ "ESIndex": { "Mappings": { "user_posts": { "Eigenschaften": { "post": { "type": "string" }, "Benutzer-ID": { "type": "long" } } } } } } –

Antwort

0

können Sie script in Aggregation verwenden:

POST index_name/type_name/_search 
{ 
"aggs": { 
    "group By Post Count": { 
    "terms": { 
     "script" : "doc['post'].size()" 
     } 
    } 
    } 
} 

Stellen Sie sicher, you enable scriptig

Hope this Ihnen hilft.

+0

keine Entschuldigung, es hat nicht funktioniert! –

+0

Welchen Fehler bekommst du ??? Oder gibt es nichts zurück? – Richa

+0

Es wird kein Fehler zurückgegeben, aber die erwarteten Ergebnisse werden nicht zurückgegeben. –

1

Der beste Weg, dies zu tun, ist ein separates Feld hinzufügen, um die Anzahl der Beiträge zu speichern.

Skripte sind nicht zu effizient (Werte werden jedes Mal neu bewertet, wenn eine Abfrage ausgeführt wird) und Sie erhalten den Wert richtig, was Abfragen und Aggregationen sehr schnell macht. Natürlich müssen Sie sicherstellen, dass Sie diese Anzahl jedes Mal aktualisieren, wenn Sie das Dokument aktualisieren.

+0

Ok! Danke mbudnik –

Verwandte Themen