Próbuję znaleźć powiązane tagi z aktualnie wyświetlanym. Każdy dokument w naszym indeksie jest oznaczony tagami. Każdy znacznik jest utworzony z dwóch części - ID i tekstową nazwę:Jak uzyskać agregację Elasticsearch z wieloma polami
{
...
meta: {
...
tags: [
{
id: 123,
name: 'Biscuits'
},
{
id: 456,
name: 'Cakes'
},
{
id: 789,
name: 'Breads'
}
]
}
}
Aby pobrać related tags Ja po prostu zapytań dokumentów i uzyskiwanie kruszywa ich tagami:
{
"query": {
"bool": {
"must": [
{
"match": {
"item.meta.tags.id": "123"
}
},
{
...
}
]
}
},
"aggs": {
"baked_goods": {
"terms": {
"field": "item.meta.tags.id",
"min_doc_count": 2
}
}
}
}
To działa doskonale , Dostaję wyniki, które chcę. Wymagam jednak nazwy znacznika ID i, aby zrobić coś użytecznego. I zbadali, jak osiągnąć ten cel, rozwiązania wydają się być:
- Połącz pól podczas indeksowania
- skrypt munge razem pól
- Zagnieżdżona agregacja
Opcja pierwsza i dwa są niedostępne dla mnie, więc chodziłem z 3, ale nie reagowałem w oczekiwany sposób. Biorąc pod uwagę następujące zapytanie (wciąż szukając dokumentów również z tagami suchary "):
{
...
"aggs": {
"baked_goods": {
"terms": {
"field": "item.meta.tags.id",
"min_doc_count": 2
},
"aggs": {
"name": {
"terms": {
"field": "item.meta.tags.name"
}
}
}
}
}
}
dostanę ten wynik:
{
...
"aggregations": {
"baked_goods": {
"buckets": [
{
"key": "456",
"doc_count": 11,
"name": {
"buckets": [
{
"key": "Biscuits",
"doc_count": 11
},
{
"key": "Cakes",
"doc_count": 11
}
]
}
}
]
}
}
}
Agregacja zagnieżdżona obejmuje zarówno wyszukiwane hasło i tagu Jestem po (w kolejności alfabetycznej).
Próbowałem złagodzić tę sytuację, dodając exclude
do zagnieżdżonej agregacji, ale spowolniło to znacznie zbyt mocno (około 100 razy dla 500000 dokumentów). Jak dotąd najszybszym rozwiązaniem jest ręczne usunięcie wyniku.
Jaki jest najlepszy sposób uzyskania agregacji tagów z identyfikatorem tagu i nazwą znacznika w odpowiedzi?
Dzięki za dotarcie tak daleko!
@i_like_robots Jestem ciekaw, przetestowałeś moje sugerowane rozwiązanie? –
postanowił zachować nagrodę za siebie, dziękuję za dobrą odpowiedź! – asktomsk
W końcu tak! W końcu udało nam się poświęcić czas na stworzenie nowego indeksu z prawidłowo zagnieżdżonymi polami, ale obawiam się, że dopiero niedawno. Dziękuję za rozmowę na moje pytanie i przepraszam za zaniedbanie jakiejkolwiek etykiety Stack Overflow! –