8

Używam elastyczną bibliotekę Go olivere do uruchomienia elastyczne zapytań - https://godoc.org/github.com/olivere/elastic#NestedQueryElasticsearch Go zagnieżdżone zapytania

Dane Próbuję kwerendy na wygląda następująco:

   "_source": { 
        "field1": "randVal1", 
        "field2": "randVal2", 
        "nestedfield": { 
         "ind1": "val1" 
        } 
       } 

próbuję uruchomić kwerendę na nestedfield pomocą wywołania NestedQuery z biblioteki Elastic Go tak:

aquery := elastic.NewTermQuery("ind1", "val1") 
query := elastic.NestedQuery("nestedfield", aquery) 

Ale pojawia się błąd informujący:

zbyt wiele argumentów konwersji na NestedQuery

Próbuję pobrać wszystkie dokumenty gdzie ind1 z nestedfield jest val1. Byłbym wdzięczny za pomoc w skonstruowaniu tego zapytania.

EDIT:

Zmieniłem go NewNestedQuery i teraz nie daje tego błędu. Nie zwraca jednak żadnych wyników, mimo że dokument ten istnieje w indeksie i mogę wysyłać zapytania do pól niezagnieżdżonych.

Próbowałem to:

aquery := elastic.NewTermQuery("ind1", "val1") 
query := elastic.NewNestedQuery("nestedfield", aquery) 

I tak:

query := elastic.NewNestedQuery("nestedfield", elastic.NewMatchQuery("nestedfield.ind1", "val1")) 

Ale oboje daje 0 wyników. Masz pojęcie, co robię źle?

EDIT # 2

Odwzorowanie jest:

"field1": { "type": "string" }, 
"field2": { "type": "string" }, 
"nestedfield": { 
        "type": "nested" 
       } 

Co ostatecznie pracował było to:

query := elastic.NewMatchQuery("nestedfield.ind1", "val1") 

udało mi się dodać dodatkowe pola do 'nestedfield' i nie zapytania takie jak:

query := elastic.NewBoolQuery().Filter(elastic.NewMatchQuery("nestedfield.ind1", "val1"), elastic.NewMatchQuery("nestedfield.ind2", "val2")) 
+0

Udostępnij swoje mapowanie.Podejrzewam, że "nestedfield" w rzeczywistości nie jest zagnieżdżonym dokumentem. – Peter

+0

Poprawiłem odpowiedź poniżej, ale powinieneś spróbować podać więcej szczegółów pełnego kodu używanego do wyszukiwania. –

+0

Wspólne mapowanie i co ostatecznie działało – covfefe

Odpowiedz

2

Wygląda na to, że powinno być:

q := elastic.NewTermQuery("nestedfield.ind1", value) 
nq := elastic.NewNestedQuery("nestedfield", q) 
  • NestedQuery to typ, a nie funkcja.
  • NewTermQuery musi przyjmować wartość z json, a nie const ciąg
  • Musisz przeanalizować swoje json źródłowy, aby uzyskać wartość od ind1

Zmieniano naprawić NewTermQuery zbyt jak na komentarze poniżej. Jeśli to nadal nie działa, podaj pełny kod, którego używasz do analizy źródła i otrzymaj błąd, ponieważ nie podajesz tutaj wystarczająco dużo szczegółów, aby odgadnąć problem.

+0

Próbowałem tego i błąd zniknął, ale nie zwrócił żadnych wyników. Edytowałem pytanie, aby dodać więcej szczegółów. – covfefe

+1

'' ind1 "' powinno być '" nestedfield.ind1 "' – Val

+0

Uważam, że Val miał na myśli 'aquery: = elastic.NewTermQuery (" nestedfield.ind1 ", val1)' – Pandawan

Powiązane problemy