Ich habe eine Elasticsearch Datenbank der Bücher:Elasticsearch - Aggregation von einzigartigen zählt
{
"id": 1,
"name": "Animal Farm"
},
{
"id": 2,
"name": "Brave New World"
},
{
"id": 3,
"name": "Nineteen Eighty-Four"
},
{
"id": 4,
"name": "Animal Farm"
},
{
"id": 5,
"name": "We"
}
Wie Sie sehen können, die Bücher mit id
von 1
und 4
den Konflikt Buchname „Animal Farm“ haben. Sie sind jedoch verschiedene Bücher. Einer ist von George Orwell, und ein anderer ist buchstäblich über Nutztiere.
Ich möchte wissen, wie oft die Buchnamen widersprechen. Für das obige Beispiel sind die erwarteten Ergebnisse:
{
"conflicts": [
{
"num_of_books": 2,
"count": "1"
},
{
"num_of_books": 1,
"count": "3"
}
]
}
Der Eintrag mit num_of_books
von 2
ist der Konflikt von „Animal Farm“, und es geschah einmal (also die count
ist 1
). Die anderen 3 Bücher haben alle unterschiedliche Namen, daher erscheinen sie im Eintrag mit num_of_books
von 1
und count
von 3
. I nicht brauchen die Namen der Bücher. Nur die Anzahl zählt.
I SQL wissen muss „Unterabfrage“, dies zu tun:
SELECT num_of_books, COUNT(*) AS _count
FROM (
SELECT COUNT(*) AS num_of_books
FROM books
GROUP BY name
)
GROUP BY num_of_books;
Ich lese die Artikel von Nested Aggregation und Sub-Aggregations, aber nicht die Möglichkeit, um zu sehen, mein Ziel zu erreichen.
Jeder Kommentar wird helfen, danke!
Vielen Dank für die Antwort, aber die Menge der Daten wouldn erlaube mir nicht, die äußere Aggregation auf der Client-Seite zu machen. Gibt es eine Möglichkeit, alle Berechnungen auf dem Server durchzuführen? Wie mit Skriptfeldern? –
Nur für den Anfang, haben Sie versucht, was ich vorschlage, nur um zu sehen, was die Leistung ergibt? Mit dem Kopf-Plugin können Sie in weniger als einer Minute überprüfen, wie es funktioniert. – Val
Ja, ich habe Ihre Lösung ausprobiert und es dauert zu lange, bis meine Kunden darauf warten. Ich brauche die Berechnung in weniger als 10 Sekunden. –