2015-03-25 16 views
7

Właśnie przełączyłem się na Elastic Search 1.5.0 i do tej pory nie mogę wykonać inner_hits pracy z zagnieżdżonym filtrem, mimo że działa dobrze z zagnieżdżonym zapytaniem.Wewnętrzne odsłon nie działa z filtrem zagnieżdżonym?

Powiedzmy, że chcemy odzyskać wewnętrzną obiektu zagnieżdżonego aktorów w filmowego obiektu.

Kiedy uruchomić następującą zagnieżdżone zapytanie:

Składnia 1

GET my_index/movie/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "actors", 
      "query": { 
      "match": { 
       "actors.id": 12345 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
} 

=> I dostać inner_hits jako udokumentowane here, który jest po prostu w porządku.

ale gdy próbuję robić równoważne zapytanie o zagnieżdżonego filtrem:

Syntax 2

GET my_index/movie/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "actors", 
      "filter": { 
      "term": { 
       "actors.id": 12345 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
} 

=> I pojawia się następujący błąd analizowania

QueryParsingException [ [my_index] [zagnieżdżony] wymaga "zapytania" lub pola "filtr"]

(a ta ostatnia kwerenda działa poprawnie, gdy usunę inner_hits - z wyjątkiem oczywiście, że nie dostanę wewnętrzne ciosy ...)

Czy jest coś złego w składni używam lub jest inner_hits jeszcze nie zaimplementowane z zagnieżdżonym filtrem?

góry dzięki

Edit 3-30-2015

Współpracuje ze składnią przewidzianego poniżej @mdewit (dzięki!)

Składnia 3

GET my_index/movie/_search 
{ 
    "query": { 
     "nested": { 
      "path": "actors", 
      "query": { 
       "filtered": { 
        "filter": { 
         "term": {"actors.id": 12345} 
        } 
       } 
      }, 
      "inner_hits" : {} 
     } 
    } 
} 

mimo że ta składnia nie pasuje do Nested Filter doc

=> Nadal nie rozumiem, co jest nie tak ze składnią 2. Wydaje mi się, że jest to błąd związany z ES.

Edycja 22.04.2015: naprawiono błąd w ES 1.5.1, patrz mój komentarz poniżej

Odpowiedz

2

buga w ElasticSearch 1.5.1 jak podano here

Więc ta składnia działa (i działa bez zarzutu)

GET my_index/movie/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
     "nested": { 
      "path": "actors", 
      "filter": { 
      "term": { 
       "actors.id": 12345 
      } 
      }, 
      "inner_hits" : {} 
     } 
     } 
    } 
    } 
} 

Dzięki chłopaki!

5

Poniższy wydaje się działać:

GET my_index/movie/_search 
{ 
    "query": { 
     "nested": { 
      "path": "actors", 
      "query": { 
       "filtered": { 
        "filter": { 
         "term": {"actors.id": 12345} 
        } 
       } 
      }, 
      "inner_hits" : {} 
     } 
    } 
}' 
+0

Tak, działa, dzięki za to! Niemniej jednak pozostawię to pytanie otwarte, ponieważ składnia, którą podałeś, nie jest dokładnie taka, jak opisana w oficjalnej dokumentacji zagnieżdżonego filtru: http://www.elastic.co/guide/en/elasticsearch/reference/1.x/ query-dsl-nested-filter.html Wciąż myślę, że coś jest nie tak z komunikatem o błędzie, który otrzymałem z ES w przykładzie, który podałem – benoit

+0

To naprawdę działa. –

Powiązane problemy