Elasticsearch - Aggregationen
Das Aggregationsframework sammelt alle von der Suchabfrage ausgewählten Daten und besteht aus vielen Bausteinen, die beim Erstellen komplexer Zusammenfassungen der Daten helfen. Die Grundstruktur einer Aggregation wird hier gezeigt -
"aggregations" : {
"" : {
"" : {
}
[,"meta" : { [] } ]?
[,"aggregations" : { []+ } ]?
}
[,"" : { ... } ]*
}
Es gibt verschiedene Arten von Aggregationen, von denen jede ihren eigenen Zweck hat. Sie werden in diesem Kapitel ausführlich behandelt.
Metrikaggregationen
Diese Aggregationen helfen bei der Berechnung von Matrizen aus den Feldwerten der aggregierten Dokumente, und manchmal können einige Werte aus Skripten generiert werden.
Numerische Matrizen sind entweder einwertig wie die durchschnittliche Aggregation oder mehrwertig wie Statistiken.
Durchschn. Aggregation
Diese Aggregation wird verwendet, um den Durchschnitt aller in den aggregierten Dokumenten vorhandenen numerischen Felder zu ermitteln. Zum Beispiel,
POST /schools/_search
{
"aggs":{
"avg_fees":{"avg":{"field":"fees"}}
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 41,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "schools",
"_type" : "school",
"_id" : "5",
"_score" : 1.0,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
},
{
"_index" : "schools",
"_type" : "school",
"_id" : "4",
"_score" : 1.0,
"_source" : {
"name" : "City Best School",
"description" : "ICSE",
"street" : "West End",
"city" : "Meerut",
"state" : "UP",
"zip" : "250002",
"location" : [
28.9926174,
77.692485
],
"fees" : 3500,
"tags" : [
"fully computerized"
],
"rating" : "4.5"
}
}
]
},
"aggregations" : {
"avg_fees" : {
"value" : 2850.0
}
}
}
Kardinalitätsaggregation
Diese Aggregation gibt die Anzahl der unterschiedlichen Werte eines bestimmten Feldes an.
POST /schools/_search?size=0
{
"aggs":{
"distinct_name_count":{"cardinality":{"field":"fees"}}
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"distinct_name_count" : {
"value" : 2
}
}
}
Note - Der Wert der Kardinalität beträgt 2, da die Gebühren zwei unterschiedliche Werte haben.
Erweiterte Statistikaggregation
Diese Aggregation generiert alle Statistiken zu einem bestimmten numerischen Feld in aggregierten Dokumenten.
POST /schools/_search?size=0
{
"aggs" : {
"fees_stats" : { "extended_stats" : { "field" : "fees" } }
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"fees_stats" : {
"count" : 2,
"min" : 2200.0,
"max" : 3500.0,
"avg" : 2850.0,
"sum" : 5700.0,
"sum_of_squares" : 1.709E7,
"variance" : 422500.0,
"std_deviation" : 650.0,
"std_deviation_bounds" : {
"upper" : 4150.0,
"lower" : 1550.0
}
}
}
}
Maximale Aggregation
Diese Aggregation ermittelt den Maximalwert eines bestimmten numerischen Felds in aggregierten Dokumenten.
POST /schools/_search?size=0
{
"aggs" : {
"max_fees" : { "max" : { "field" : "fees" } }
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 16,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"max_fees" : {
"value" : 3500.0
}
}
}
Min. Aggregation
Diese Aggregation ermittelt den Mindestwert eines bestimmten numerischen Felds in aggregierten Dokumenten.
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "min" : { "field" : "fees" } }
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"min_fees" : {
"value" : 2200.0
}
}
}
Summenaggregation
Diese Aggregation berechnet die Summe eines bestimmten numerischen Feldes in aggregierten Dokumenten.
POST /schools/_search?size=0
{
"aggs" : {
"total_fees" : { "sum" : { "field" : "fees" } }
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"total_fees" : {
"value" : 5700.0
}
}
}
Es gibt einige andere Metrikaggregationen, die in besonderen Fällen verwendet werden, wie z. B. Geobegrenzungsaggregation und Geoschwerpunktaggregation zum Zweck der Geolokalisierung.
Statistik-Aggregationen
Eine mehrwertige Metrikaggregation, die Statistiken über numerische Werte berechnet, die aus den aggregierten Dokumenten extrahiert wurden.
POST /schools/_search?size=0
{
"aggs" : {
"grades_stats" : { "stats" : { "field" : "fees" } }
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"grades_stats" : {
"count" : 2,
"min" : 2200.0,
"max" : 3500.0,
"avg" : 2850.0,
"sum" : 5700.0
}
}
}
Aggregationsmetadaten
Sie können einige Daten zur Aggregation zum Zeitpunkt der Anforderung mithilfe eines Meta-Tags hinzufügen und diese als Antwort erhalten.
POST /schools/_search?size=0
{
"aggs" : {
"min_fees" : { "avg" : { "field" : "fees" } ,
"meta" :{
"dsc" :"Lowest Fees This Year"
}
}
}
}
Beim Ausführen des obigen Codes erhalten wir das folgende Ergebnis:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"min_fees" : {
"meta" : {
"dsc" : "Lowest Fees This Year"
},
"value" : 2850.0
}
}
}