ElasticSearch hat grob 3 Arten von Aggregationen.
Bucket - Ermöglicht die Bildung von "Buckets" verschiedener Typen. Begriffe (in nicht analysierten String-Feldern), Zeitintervalle (Datums-Histogramm-Aggregationen, wenn Ihre Daten einen "Zeitstempel" -Typ haben), geographische Formen (Geo-Hash-Aggregationen, wenn Ihre Daten Längen-/Breitengrad haben).
Metric - Summe, Durchschnitt, Min, Max und numerische innerhalb Eimer oder außerhalb Eimer angewendet Aggregationen (auf höchster Ebene)
Pipeline - Dies ist experimentell. Feed-Ausgabe von einer Aggregation zu einer anderen.
Sie können mehrere Bucket-Aggregationen auf derselben Ebene haben (entweder "aggs" -Element der obersten Ebene oder verschachtelte "aggs" innerhalb einer anderen Bucket-Aggregation). Sie können Bucket-Aggregationen auch ineinander verschachteln.
Für metrische Aggregationen können Sie sie auf dem obersten "aggs" -Element oder in einer anderen Bucket-Aggregation haben.
In Ihrem Beispiel, wenn A, B und C vom Typ String und not_analyzed sind. Sie können Bucket-Aggregationen wie.
{
"size": 0,
"aggs": {
"one": {
"terms": {
"field": "A"
},
"aggs": {
"two": {
"terms": {
"field": "B"
}
}
}
},
"aggs": {
"three": {
"terms": {
"field": "C"
}
}
}
}
}
"Eins" und "Drei" sind Begriffsaggregationen auf der obersten Ebene. "Zwei" ist in "Eins" verschachtelt.
Wenn Sie zusätzlich einige numerische Felder in Ihrem Dokument hatten. Sagen wir zum Beispiel D und E. Sie wollen die Summe von D innerhalb jedes Buckets von A und jedes Buckets von B berechnen, Summe von E in jedem Bucket von B. Auch Summe von D in jedem Bucket von C. Sie können alle von ihnen tun gleichzeitig in einer Abfrage, in einem Durchgang ...
{
"size": 0,
"aggs": {
"one": {
"terms": {
"field": "A"
},
"aggs": {
"sumOfDWithinA": {
"sum": {
"field": "D"
}
},
"two": {
"terms": {
"field": "B"
},
"aggs": {
"sumOfDWithinB": {
"sum": {
"field": "D"
}
},
"sumOfEWithinB": {
"sum": {
"field": "E"
}
}
}
}
}
},
"aggs": {
"three": {
"terms": {
"field": "C"
},
"aggs": {
"sumOfDWithinC": {
"sum": {
"field": "D"
}
}
}
}
}
}
}