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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.