aucune [requête] enregistrée pour [filtrée]


108

J'ai une requête dont j'ai besoin pour filtrer les résultats.

Ceci est ma requête

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

Je reçois une erreur disant no [query] registered for [filtered]. J'ai clairement une requête pour le champ filtré. Je suis le format donné dans la documentation des requêtes filtrées sur la page elasticsearch. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

Réponses:


185

La filteredrequête est obsolète et supprimée dans ES 5.0. Vous devez maintenant utiliser la bool/must/filterrequête à la place.

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

Voici les différences entre les deux requêtes:

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

PS: la page de référence que vous regardez se trouve dans les "pages supprimées" de l'annexe, elle ne fait donc plus partie de la documentation principale.


4
Lors de l'utilisation de la version 5.5, il semble que default_operator a été supprimé de la requête multi_match ainsi que val, il vaut peut-être la peine de mettre à jour cette réponse car cela m'a conduit sur la mauvaise route en supposant que ce qui précède allait fonctionner.J'ai modifié la requête pour qu'elle corresponde à mes champs pour ensuite le réaliser n'a pas fonctionné! C'était une solution simple pour moi, mais simplement en supprimant l'opérateur par défaut, mais cela vaut peut-être la peine d'être modifié pour les futurs lecteurs. L'erreur est: [multi_match] la requête ne prend pas en charge [default_operator]
Birdy

3
@Birdy en fait le paramètre est nommé operatoret non default_operator, j'ai modifié ma réponse, désolé à ce sujet.
Val

Val - Si vous avez une minute, pourriez-vous m'aider s'il vous plaît sur un problème de logstash, je me suis cogné la tête de la table pendant plus de 48 heures haha ​​et je sais que vous êtes un expert dans le domaine qui pourrait aider à sauver la journée haha, Merci, je serais toujours endetté si vous le pouviez !! stackoverflow.com/questions/45577572/…
Birdy

Merci, cela a fonctionné pour moi lors de la mise à niveau d'une instance ES5.1 vers 7.1
jhob101
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.