Problème avec query_string + fuzzing sur mots avec accents

397 views
Skip to first unread message

Florian Espla

unread,
Dec 10, 2012, 10:55:37 AM12/10/12
to elastics...@googlegroups.com

Bonjour,

 

J'essaye depuis quelques jours maintenant de faire une recherche sur le mot "étudiant" (dans un champ description), qu'il soit écrit dans l'index avec l'accent, sans l'accent, au pluriel ou non, féminin ou non. La requête est effectué à l'aide d'une query_string pour l'utilisation du fuzzing.

 

Un exemple de champ description serait :

"A SAISIR !! Jolie T2 en très bon état, fonctionnel, 33m² dans une résidence sécurisée avec balcon et parking.. Très bonne situation géographique, à 2 pas du métro, écoles et toutes commodités.. Idéal étudiant ou investisseurs !"

 

J'ai testé plusieurs mapping mais aucun ne me permet de recherche à la fois étudiant avec et sans accent avec le fuzzing (min_prefix_length = 3).

Ci dessous un cas simplifié (la requête query_string portant sur le _all de l'index dans un cas standard):

https://gist.github.com/4251163

 

Voici la liste succincte des différents analyzer testés :

https://gist.github.com/4251182

Le fuzzy_prefix_length obligeant les 3 premiers caractères de chaque terme à être exact, j'ai l'impression que le problème vient de là.

 

J'arrive à avoir soit la version sans accent, soit la version avec accent qui fonctionne et me retourne le résultat, jamais les deux simultanément.

Dois-je obligatoirement créer deux champs description avec deux mappings différent et rechercher sur ces deux champs ? Ceci me poserai problème car les termes matchés seront en plus highlightés (supprimer de l'exemple pour simplifier).

Ou est-ce que je m'y prends mal ?

 

Merci d'avance pour votre aide,

 

Florian,

Jérôme Mainaud

unread,
Dec 10, 2012, 5:29:33 PM12/10/12
to elastics...@googlegroups.com
Bonsoir Florian,

J'ai deux questions surement très bêtes :
  1. Pourquoi n'utilises tu pas directement la requête "fuzzy" plutôt que query_string ? http://www.elasticsearch.org/guide/reference/query-dsl/fuzzy-query.html
  2. Ta requête ne devrait-elle pas être :   "query": "etudiant~" avec un tilde final ?
Es-tu sûr que les requêtes de type fuzzy utilisent l'analyseur ?
Enfin, as-tu vraiment besoin de la recherche flou. Les accents sont généralement gérés avec un analyseur qui contient un filtre acsiifolding. La lemisation permet de s’abstraire des déclinaisons (féminin, pluriel.) Et les recherche qui les utilisent sont bien plus performantes que la recherche flou. Si tu n'as pas d'autres raisons de faire une recherche flou, je t'invite à tester ces solutions plus classiques.

Jérôme Mainaud
jer...@mainaud.com

Le 10/12/12 16:55, Florian Espla a écrit :
--
---
Vous pouvez également poster et consulter les réponses en anglais sur le groupe Elasticsearch https://groups.google.com/group/elasticsearch
 
Si vous avez également posté votre question sur la mailing list elasti...@googlegroups.com, merci d'indiquer ici le lien vers cette discussion pour faciliter le suivi.
 
Twitter : @ElasticsearchFR https://twitter.com/#!/ElasticsearchFR
Site web (English) : http://www.elasticsearch.org/

Florian Espla

unread,
Dec 11, 2012, 4:07:46 AM12/11/12
to elastics...@googlegroups.com
Bonjour,

Le problème avait l'air de venir de mon analyzer, en passant sur la mailing liste je suis tombé sur le post de David concernant l'analyzer et les avions : https://mail.google.com/mail/u/0/?tab=wm#inbox/13b7531259bdc753

Il semblerait que son analyzer réponde parfaitement à mes besoins !

1. Pourquoi n'utilises tu pas directement la requête "fuzzy" plutôt que query_string ?
Je n'utilise pas la requete "fuzzy" car plusieurs termes peuvent être dans la requête en même temps. J'ai testé la requête flt, elle aurait pu fonctionner si elle avait pu prendre le paramètre default_operator, mais il me semble que ca ne soit pas possible. De plus la partie wildcard pourra m'être utile pour la suite.

2.
Ta requête ne devrait-elle pas être :   "query": "etudiant~" avec un tilde final ?
J'ai testé avec la syntaxe "etudiant~0.5" et "min_similarity: 0.5", les deux syntaxes donnent le même résultat il me semble

La requête de type fuzzy est nécessaire pour traiter les fautes de frappe (ou d'orthographe) de l'utilisateur. Le mot étudiant était un exemple qui me posait problème, c'est vrai que pour traiter les déclinaisons le fuzzing n'est pas nécessaire. Cependant pour des mots du type ascenseur écrit ascensuer ou terrasse écrit terasse cela me semble indispensable.

Merci pour toutes ces pistes.
Et merci David pour l'analyzer.

Bonne journée,

Florian

David Pilato

unread,
Dec 13, 2012, 9:41:20 AM12/13/12
to elastics...@googlegroups.com
Pour info, pour ceux qui retomberont sur ce POST plus tard, le lien vers la discussion sur les "avions" est ici : https://groups.google.com/d/topic/elasticsearch-fr/SxVr5SgcWls/discussion
 
David.
--
---
Vous pouvez également poster et consulter les réponses en anglais sur le groupe Elasticsearch https://groups.google.com/group/elasticsearch
 
Si vous avez également posté votre question sur la mailing list elasti...@googlegroups.com, merci d'indiquer ici le lien vers cette discussion pour faciliter le suivi.
 
Twitter : @ElasticsearchFR https://twitter.com/#!/ElasticsearchFR
Site web (English) : http://www.elasticsearch.org/

 

--
David Pilato
http://www.scrutmydocs.org/
http://dev.david.pilato.fr/
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs

20100

unread,
Feb 10, 2013, 10:09:21 AM2/10/13
to elastics...@googlegroups.com
Bonjour,

Je me permets de réouvrir ce post car j'ai appliqué la config suivante : https://gist.github.com/vlenoir/4749798

J'utilise le plugin head pour faire mes essais.

Je fais des recherches sur le mot hélicoptère.

Le résultat suivant :https://gist.github.com/vlenoir/4749814

Si je cherche le terme 'hel', ES me renvoit bien des résultats. Si je cherche le terme hél, ES me renvoit aucun résultat.
Pourtant le asciifolding est bien appliqué.

Dans mon deuxième essai avec le hightlight ( https://gist.github.com/vlenoir/4749833 ), un des résultat highlight est  "j'aime <em>l'hélicoptère</em>"
Pourtant j'applique le filtre elision, je ne comprends pas pourquoi hightlight me renvoie le " l' "

Merci par avance pour vos réponses.

Vincent

Florian Espla

unread,
Feb 11, 2013, 3:48:32 AM2/11/13
to elastics...@googlegroups.com
Bonjour,

Le type de query "prefix" n'est pas analysé. Ce qui fait que le token généré ("hél") ne correspond pas aux tokens stocké dans l'index.

Tu peux peut-etre utiliser une query_string query du style "hél*" pour faire le prefix avec les wildcards.

Pour la partie highlight par contre je n'ai aucune idée.

Bonne journée,

Florian

--
--
---
Vous pouvez également poster et consulter les réponses en anglais sur le groupe Elasticsearch https://groups.google.com/group/elasticsearch
 
Si vous avez également posté votre question sur la mailing list elasti...@googlegroups.com, merci d'indiquer ici le lien vers cette discussion pour faciliter le suivi.
 
Twitter : @ElasticsearchFR https://twitter.com/#!/ElasticsearchFR
Site web (English) : http://www.elasticsearch.org/
 
---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Elasticsearch FR.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse elasticsearch-...@googlegroups.com.
Pour plus d'options, visitez le site https://groups.google.com/groups/opt_out .
 
 

David Pilato

unread,
Feb 11, 2013, 4:41:22 AM2/11/13
to elastics...@googlegroups.com
Pour le highlight, cela me semble "normal" d'un point de vue use case.

Par exemple, si tu fais un wildcard sur helic*, heureusement que le highlight se fait sur le mot "source" et non sur l'analyse qui a été faite.

Pire, un soundex qui donnerait Q200 pour le mot Quick ne serait pas highlighté puisque Q200 n'est pas la source.

Merci pour le préfix non analysé. J'avais oublié ;-)

--
David ;-)
Twitter : @dadoonet / @elasticsearchfr / @scrutmydocs

20100

unread,
Feb 11, 2013, 4:45:12 AM2/11/13
to elastics...@googlegroups.com
Ok,

Merci pour ses réponses...

Je vais creuser le plugin suggest qui répondra peut être à mes attentes.

Vincent
Reply all
Reply to author
Forward
0 new messages