nein [Abfrage] registriert für [gefiltert]


107

Ich habe eine Abfrage, die ich zum Herausfiltern von Ergebnissen benötige.

Das ist meine Frage

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

Ich erhalte eine Fehlermeldung no [query] registered for [filtered]. Ich habe eindeutig eine Abfrage für das gefilterte Feld. Ich folge dem Format, das in der Dokumentation zu gefilterten Abfragen auf der Elasticsearch-Seite angegeben ist. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

Antworten:


184

Die filteredAbfrage wurde in ES 5.0 veraltet und entfernt. Sie sollten jetzt bool/must/filterstattdessen die Abfrage verwenden.

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

Hier sind die Unterschiede zwischen den beiden Abfragen:

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

PS: Die Referenzseite, die Sie sich ansehen, befindet sich in den "gelöschten Seiten" des Anhangs, ist also nicht mehr Teil der Hauptdokumentation.


4
Bei Verwendung von 5.5 scheint default_operator ebenfalls aus der multi_match-Abfrage entfernt worden zu sein. Daher lohnt es sich möglicherweise, diese Antwort zu aktualisieren, da sie mich auf den falschen Weg geführt hat, vorausgesetzt, dass das oben Gesagte funktionieren würde. Ich habe die Abfrage so geändert, dass sie mit meinen Feldern übereinstimmt, um sie dann zu realisieren hat nicht funktioniert! Es war eine einfache Lösung für mich, obwohl ich nur den Standardoperator entfernt habe, aber vielleicht eine Bearbeitung für zukünftige Leser wert. Der Fehler ist: [multi_match] Abfrage unterstützt [default_operator] nicht
Birdy

3
@Birdy eigentlich heißt der Parameter operatorund nicht default_operator, ich habe meine Antwort geändert, sorry.
Val

Val - Wenn Sie eine Minute Zeit haben, helfen Sie mir bitte bei einem Problem mit dem Logstash. Ich habe meinen Kopf über 48 Stunden lang vom Tisch geschlagen, haha, und ich weiß, dass Sie ein Experte auf diesem Gebiet sind, der helfen könnte, den Tag zu retten, haha, Danke, ich wäre für immer verschuldet, wenn du könntest !! stackoverflow.com/questions/45577572/…
Birdy

Vielen Dank, dies hat bei mir funktioniert, als ich eine ES5.1-Instanz auf 7.1
jhob101 aktualisiert habe.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.