Nicht sicher, wie die Frage zu formulieren ist. Ich benutze Elasticsearch 2.2.Elasticsearch: Filteraggregation mit Bucket-Wert
Beginnen wir mit einem Beispiel des Datensatzes, aus 5 Dokumenten starten:
[
{
"header": {
"called_entity": { "uuid": "a" },
"coverage_entity": {},
"sucessful_transfers": 1
}
},
{
"header": {
"called_entity": { "uuid": "a" },
"coverage_entity": { "uuid": "b" },
"sucessful_transfers": 1
}
},
{
"header": {
"called_entity": { "uuid": "b" },
"coverage_entity": { "uuid": "a" },
"sucessful_transfers": 1
}
},
{
"header": {
"called_entity": { "uuid": "b" },
"coverage_entity": { "uuid": "a" },
"sucessful_transfers": 0
}
}
]
called_entity immer hat eine Uuid. coverage_entity kann leer sein, oder haben Sie eine Uuid.
Ich benutze ein Skript zu aggregieren entweder called_entity.uuid oder coverage_entity.uuid:
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"dim1": {
"terms": {
"script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']",
"size": 10
},
"aggs": {
"successful_transfers": {
"sum": {
"field": "header.successful_transfers"
}
}
}
}
}
}
So, jetzt die Aggregation wurde von erzeugten Bedingungen entweder header.called_entity.uuid oder header.coverage_entity.uuid.
Wie kann ich meine Aggregation mit dem Wert des Aggregationsschlüssels filtern? Zum Beispiel, wenn ich für jeden Eimer zählen möchte, wie viele Dokumente haben Uuid nur aus header.called_entity.uuid. Etwas wie das:
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"dim1": {
"terms": {
"script" : "return doc['header.called_entity.uuid'] + doc['header.coverage_entity.uuid']",
"size": 10
},
"aggs": {
"successful_transfers": {
"sum": {
"field": "header.successful_transfers"
}
},
"from_called_entity": {
"filter": {
"term": { "header.called_entity.uuid": BUCKET_KEY }
}
}
}
}
}
}
Ja, das würde für mein vereinfachtes Beispiel funktionieren, aber ich muss komplexere Filter für jede Aggregation durchführen, die boolesche Bedingungen entweder für called_entity, coverage_entity, beide und/oder andere Felder sind. Danke trotzdem ... Ich hatte gehofft, der Schlüssel könnte zumindest in einem Skript verfügbar sein, aber ich konnte nichts in den Dokumenten oder in anderen Fragen finden ... – Raphael
Eigentlich funktioniert es (ich fusionierte beide Aggregationen serverseitig, nach Erhalt der Antwort von ElasticSearch). Danke vielmals! – Raphael