Załóżmy, że mam indeksu z zagnieżdżonego dokumentu, który wygląda tak:Jak mogę agregować przefiltrowane zagnieżdżone dokumenty w ElasticSearch?
{
"id" : 1234
"cars" : [{
"id" : 987
"name" : "Volkswagen"
}, {
"id": 988
"name" : "Tesla"
}
]
}
I teraz chcą uzyskać agregację zliczania „samochód” dokumentów pasujących do określonych kryteriów, na przykład pasujące do zapytania wyszukiwania. Moją pierwszą próbą było następujące zapytanie:
{
"query" : {
"nested" : {
"path" : "cars",
"query" : {
"query_string" : {
"fields" : ["cars.name"],
"query" : "Tes*"
}
}
}
},
"aggregations" : {
"cars" :{
"nested" : {
"path" : "cars"
},
"aggs" : {
"cars" : {
"terms" : {
"field" : "cars.id"
}
}
}
}
}
}
Miałem nadzieję tutaj, aby uzyskać wynik agregacji tylko identyfikatory samochodów, których nazwy zaczynają się od „Tes”. Jednak agregacja zamiast tego używa wszystkich samochodów, które znajdują się w dokumencie najwyższego poziomu, który zawiera również pasujące dokumenty zagnieżdżone. Oznacza to, że w powyższym przykładzie "Volkswagen" również byłby policzony, ponieważ dokument najwyższego poziomu zawiera również samochód, który pasuje.
Jak mogę uzyskać agregację tylko pasujące zagnieżdżone dokumentów?
Czy jesteś pewien, że ten kod działa? Jestem w obliczu tego samego problemu, ale gdy próbuję kodu otrzymuję 'parsing_exception'„nie [zapytanie] zarejestrowany dla zapytania []” –
To na pewno nie działa, gdy stworzyłem tej kwerendy, ale format zapytań ES hasn” t zawsze był kompatybilny wstecz. IIRC Napisałem to zapytanie dla ES1.x, nowsze wersje mogą go nie zaakceptować. – Tiddo
Tak, @Tiddo - otrzymuję taką samą odpowiedź jak ty. Nie mogę zobaczyć, jak to zrobić dla bieżącej wersji. Daj mi znać, jeśli masz gdziekolwiek z tym. – danieljames