Mit dieser Abbildung:Elasticsearch verschachtelte Aggregationen liefern doppelte Ergebnisse
PUT pizzas
{
"mappings": {
"pizza": {
"properties": {
"name": {
"type": "keyword"
},
"types": {
"type": "nested",
"properties": {
"topping": {
"type": "keyword"
},
"base": {
"type": "keyword"
}
}
}
}
}
}
}
Und diese Daten:
PUT pizzas/pizza/1
{
"name": "meat",
"types": [
{
"topping": "bacon",
"base": "normal"
},
{
"topping": "pepperoni",
"base": "normal"
}
]
}
PUT pizzas/pizza/2
{
"name": "veg",
"types": [
{
"topping": "broccoli",
"base": "normal"
}
]
}
Wenn ich diese verschachtelte Aggregations Abfrage:
GET pizzas/_search
{
"size": 0,
"aggs": {
"types_agg": {
"nested": {
"path": "types"
},
"aggs": {
"base_agg": {
"terms": {
"field": "types.base"
}
}
}
}
}
}
ich dieses Ergebnis zu erhalten :
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0,
"hits": []
},
"aggregations": {
"types_agg": {
"doc_count": 3,
"base_agg": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "normal",
"doc_count": 3
}
]
}
}
}
}
Ich erwartete, dass meine Aggregation eine doc_count
von 2 zurückgibt, da es nur zwei Dokumente gibt, die meiner Abfrage entsprechen. Es ist jedoch klar, dass es, da es sich um einen invertierten Index handelt, 3 Ergebnisse und somit 3 Dokumente finden.
Gibt es trotzdem, es zu erhalten, um eindeutige Dokumentenzählungen zurückzugeben?
(getestet in Elasticsearch 5.4.3)
wie das ist, wie ich das verstehe. Bei verschachtelter Aggregation, wenn Sie verschachtelt sind, werden die Ergebnisse im Kontext des verschachtelten Typs zurückgegeben. Wie es den Aggregator verlässt, dort reduzieren. Sie werden also einen reverse_nested drücken, um zu root oder so weiter zu kommen. Verwenden Sie https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-reverse-nested-aggregation.html – user3775217