2016-11-10 12 views
48

Mam kwerendę, która musi odfiltrować wyniki.nie [zapytanie] zarejestrowane dla [filtrowane]

To moje zapytanie

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "multi_match": { 
        "default_operator": "AND", 
        "fields": [ 
         "author", 
         "title", 
         "publisher", 
         "year" 
        ], 
        "query": "George Orwell" 
       } 
      }, 
      "filter": { 
       "terms": { 
        "year": [ 
         1980, 
         1981 
        ] 
       } 
      } 
     } 
    } 
} 

pojawia się błąd mówiący no [query] registered for [filtered]. Mam wyraźnie zapytanie o filtrowane pole. Postępuję zgodnie z formatem podanym w przefiltrowanej dokumentacji zapytań na stronie elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

Odpowiedz

90

Pytanie filtered zostało wycofane i usunięte w wersji ES 5.0. Powinieneś teraz użyć zapytania bool/must/filter.

{ 
    "query": { 
     "bool": { 
      "must": { 
       "multi_match": { 
        "operator": "and", 
        "fields": [ 
         "author", 
         "title", 
         "publisher", 
         "year" 
        ], 
        "query": "George Orwell" 
       } 
      }, 
      "filter": { 
       "terms": { 
        "year": [ 
         1980, 
         1981 
        ] 
       } 
      } 
     } 
    } 
} 

Tutaj są różnice między tymi dwoma zapytaniami:

3,4c3,4 
<   "bool": { 
<    "must": { 
--- 
>   "filtered": { 
>    "query": { 
6c6 
<      "operator": "and", 
--- 
>      "default_operator": "AND", 

PS: strona odniesienia patrzysz znajduje się w „usuniętych stron” w dodatku, więc nie jest częścią główna dokumentacja.

+1

Podczas korzystania z wersji 5.5 wygląda na to, że default_operator został usunięty z kwerendy multi_match oraz val, więc być może warto zaktualizować tę odpowiedź, ponieważ doprowadziło mnie to do niewłaściwej drogi, zakładając, że powyższe czynności będą działać. Poprawiłem zapytanie, aby dopasować moje pola do wtedy zrozum, że to nie zadziałało! To była prosta poprawka dla mnie, chociaż bu właśnie usuwa domyślnego operatora, ale może warto go edytować dla przyszłych czytelników. Błąd: zapytanie [multi_match] nie obsługuje [default_operator] – Birdy

+0

@Birdy faktycznie parametr nazywa się 'operator', a nie' default_operator', poprawiłem moją odpowiedź, przepraszam za to. – Val

+0

Val - Jeśli dostaniesz minutę, pomóż mi rozwiązać problem z logowaniem, walnę głową w stół przez ponad 48 godzin haha ​​i wiem, że jesteś ekspertem w dziedzinie, która może pomóc w oszczędzaniu dnia. , Dzięki będę na zawsze w długach, jeśli możesz !! https://stackoverflow.com/questions/45577572/logstash-error-when-converting-mysql-value-to-nested-elasticsearch-property-on-s – Birdy