149 votes

Aucune correspondance trouvée pour le champ dans l'ordre de tri dans ElasticSearch

Elasticsearch génère un SearchParseException lors de l'analyse de la requête, si certains documents trouvés ne contiennent pas le champ utilisé dans les critères de tri.

SearchParseException : Parse Failure [Aucune correspondance trouvée pour [price] dans l'ordre de tri].

Comment puis-je effectuer une recherche fructueuse dans ces documents, même si certains d'entre eux sont dépourvus de l'adresse IP. price champ ?

137voto

Yadu Points 919

Après avoir creusé davantage, j'ai trouvé la solution comme indiqué ci-dessous. ignore_unmapped doit être explicitement défini comme true dans la clause de tri.

"sort" : [
       { "rating": {"order" : "desc" , "ignore_unmapped" : true} },
       { "price": {"order" : "asc" , "missing" : "_last" , "ignore_unmapped" : true} }
]

Pour plus d'informations, consultez les références Elasticsearch pour :

62voto

Navneet Kumar Points 41

Pour ceux qui cherchent un exemple des deux ignore_unmapped y unmapped_type veuillez voir ma réponse ici .

Notez que "ignore_unmapped" est maintenant déprécié en faveur de "unmapped_type". Cela a été fait dans le cadre de #7039

De la documentation : Avant la version 1.4.0, il existait le paramètre booléen ignore_unmapped, qui ne fournissait pas suffisamment d'informations pour décider des valeurs de tri à émettre, et ne fonctionnait pas pour la recherche inter-index. Il est toujours supporté mais les utilisateurs sont encouragés à migrer vers le nouveau type unmapped_type à la place.

Par défaut, la demande de recherche échoue si aucun mappage n'est associé à un champ. L'option unmapped_type permet d'ignorer les champs qui n'ont pas de correspondance et de ne pas les trier. La valeur de ce paramètre est utilisée pour déterminer les valeurs de tri à émettre. Voici un exemple d'utilisation de cette option :

{
    "sort" : [
        { "price" : {"unmapped_type" : "long"} },
    ],
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

Si l'un des index interrogés n'a pas de correspondance pour le prix, Elasticsearch le traitera comme s'il y avait une correspondance de type long, tous les documents de cet index n'ayant pas de valeur pour ce champ.

7voto

Khalid Skiod Points 75

Si vous utilisez es 6.7

Essayez celui-ci

sort : ["title.keyword:desc"]

4voto

mahemoff Points 4879

Apparemment, ElasticSearch ne peut pas trier les valeurs nulles. Je pensais qu'il traiterait les valeurs nulles comme étant au début ou à la fin (comme avec le triage SQL), mais je crois que cela déclenche également cette erreur.

Donc si vous voyez cette erreur, vous devez vous assurer que l'attribut de tri a une valeur par défaut lorsqu'il est envoyé à ElasticSearch.

J'ai eu cette erreur avec Rails+ElasticSearch+Tire parce que la colonne de tri n'avait pas de valeur par défaut, et était donc envoyée à ES comme nulle.

Ce numéro indique que les valeurs nulles sont manipulées, mais ce n'était pas mon expérience. C'est quelque chose qui vaut la peine d'être essayé de toute façon.

3voto

Ivan Marjanovic Points 425

Permettez-moi d'essayer de vous aider au cas où la réponse originale ne vous conviendrait pas. Pour ES 6.x essayez le code ci-dessous, ignore_unmapped est déprécié.

"sort" : [
       { "rating": {"order" : "desc" , "unmapped_type" : "long"} },
       { "price": {"order" : "asc" , "missing" : "_last" , "unmapped_type" : "long"} }
]

Vous trouverez plus d'informations sur le tri sur le site :

https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-sort.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X