nie zarejestrowano [zapytanie] dla [filtrowane]

108

Mam zapytanie, które chcę odfiltrować wyniki.

To jest moje zapytanie

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

Otrzymuję komunikat o błędzie no [query] registered for [filtered]. Mam wyraźnie zapytanie o filtrowane pole. Postępuję zgodnie z formatem podanym w dokumentacji filtrowanego zapytania na stronie Elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

devxeq
źródło

Odpowiedzi:

185

filteredKwerenda została zaniechana i usuwane w ES 5.0. Zamiast tego powinieneś teraz użyć bool/must/filterzapytania.

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

Oto różnice między tymi dwoma zapytaniami:

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

PS: przeglądana strona referencyjna znajduje się na „usuniętych stronach” w dodatku, więc nie jest już częścią głównej dokumentacji.

Val
źródło
4
Podczas korzystania z 5.5 wygląda na to, że default_operator został również usunięty z zapytania multi_match, więc może warto zaktualizować tę odpowiedź, ponieważ poprowadziło mnie to złą drogę, zakładając, że powyższe zadziała, poprawiłem zapytanie, aby pasowało do moich pól, aby następnie to zrealizować nie zadziałało! To była dla mnie prosta poprawka, ale po prostu usunąłem domyślny operator, ale może warto go edytować dla przyszłych czytelników. Błąd: [multi_match] zapytanie nie obsługuje [default_operator]
Birdy
3
@Birdy faktycznie parametr ma nazwę, operatora nie default_operator, poprawiłem odpowiedź, przepraszam za to.
Val
Val: Jeśli masz chwilkę, pomóż mi w rozwiązaniu problemu z logami, odbijam głowę od stołu przez ponad 48 godzin haha ​​i wiem, że jesteś ekspertem w tej dziedzinie, który może pomóc uratować dzień haha, Dzięki, byłbym na zawsze zadłużony, gdybyś mógł! stackoverflow.com/questions/45577572/…
Birdy
Dzięki, to zadziałało podczas aktualizacji instancji ES5.1 do wersji 7.1
jhob101