Der Einfachheit halber nehme ich Index aus 3 Reihen in elastischen:Elasticsearch: Aggregation Filterung
{"id": 1, "tags": ["t1", "t2", "t3"]},
{"id": 2, "tags": ["t1", "t4", "t5"]}
ich von einigen Tags aggregieren müssen ohne Ergebnis anderer Tags in passenden Dokumenten Rückkehr:
{
"aggs": {
"tags": {
"terms": {"field": "tags"}
}
},
"query": {
"bool": {
"filter": [
{
"terms": {"tags": ["t1", "t2"]}
}
]
}
}
}
# RESULT
{
"aggregations": {
"tags": {
"buckets": [
{"doc_count": 2, "key": "t1"},
{"doc_count": 1, "key": "t2"},
{"doc_count": 1, "key": "t3"}, # should be removed by filter
{"doc_count": 1, "key": "t4"}, # should be removed by filter
{"doc_count": 1, "key": "t5"}, # should be removed by filter
],
}
},
"hits": {
"hits": [],
"max_score": 0.0,
"total": 2
},
}
Wie (vielleicht) postfilter dieses Ergebnis?
Weil im Falle von 3 Zeilen im Index dies nur 3 zusätzliche Elemente (t3, t4, t5). Aber in der realen Situation habe ich mehr als 200K Reihen im Index und es ist schrecklich! Ich brauche insgesamt 50 Tags, aber ich bekomme Ergebnisse mit mehr als 1K Tags.