Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour, je n'ai pas vraiment trouvé de réponse au problème suivant : un recherce sur bière (avec accent) ne renvoie pas biere (sans accent)
par contre une recherche sur biere renvoie bière entre autres
il y a un petit truc de config à savoir lors de la créatoin de l'index ou de l'appel à la recherche ?
autre sujet les wildcards ne marchent toujours pas dans la 1.0.2 ? j'ai cru comprendre en lisant ce forum que sur un snapshot 2000708xx ca marchait et plus sur la release ?
Merci
Hors ligne
J'ai le même problème, beaucoup de monde pose la question mais aucunes réponses n'est avancées... une solution ?
Comme faire que si je tape sante ou santé je trouve un même résultat ???
Hors ligne
J'arrive sur le même problème...essayé ceci:
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');
Hors ligne
Salut,
J'ai eu l'occasion de mettre en place récemment, pour régler le problème j'utilise une méthode sanitize sur tous les contenus indexés dans des champs pour remplacer les 'é' par des 'e', 'à' par 'a', etc. Ceci doit également être faisable en définissant votre propre Analyseur qui étend Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8, en l'état et à ma connaissance, il n'existe pas d'analyseur pour le français.
Puis on utilise la même méthode sanitize sur les termes recherchés avant de construire sa requête, donc une recherche sur "bière" retourne aussi les "biere" indexés et inversement.
Pour améliorer encore la recherche, j'utilise un filtre pour ne pas indexer et rechercher les "la", "le", "ton", "ta" :
$analyzer = new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive(); $stopWords = array("la", "le", etc); $stopWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_StopWords($stopWords); $analyzer->addFilter($stopWordsFilter); Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer);
Et enfin, je met tous les mots au singulier à coup d'expressions régulières avant l'indexation et la recherche, bières => biere, bateaux => bateau, etc.
Voilà, je ne sais pas si c'est idéal, mais les résultats de recherche sont beaucoup plus pertinents et ce à moindre coût
A+
Nicolas
Dernière modification par nicol@s (08-12-2009 20:39:10)
Hors ligne
Wow c'est une très bonne idée ! Mais ton array de StopWords doit être énorme non ? Il y a tellement de règle qu'on pourrait mettre, par exemple, ne pas indexer tous les mots plus court que 3 caractères, etc...
Quand tu dis que tu mets les mots au singulier par du regex avant l'indexation...c'est probablement parce que ce ne sont pas les pages HTML qui tu index ?
Hors ligne
Wow c'est une très bonne idée ! Mais ton array de StopWords doit être énorme non ? Il y a tellement de règle qu'on pourrait mettre, par exemple, ne pas indexer tous les mots plus court que 3 caractères, etc...
En fait il n'y a pas tant de stop word que ça (pour mon système, ~50), c'est vraiment des mots qui n'apporte que peu à la sémantique de la recherche, tu peux trouver des listes toutes faites sur internet, par exemple, ça c'est pas mal : http://snowball.tartarus.org/algorithms/french/stop.txt
Mais bon il y a des limites à cette utilisation, pour les recherches : "je joue aux dès" et "des joues bien rebondies", une fois l'accent enlevé, le mot "des" n'est pas indexé alors qu'il apporte du sens dans le cas 1 et pas dans le 2nd, tout est affaire de compromis donc
Quand tu dis que tu mets les mots au singulier par du regex avant l'indexation...c'est probablement parce que ce ne sont pas les pages HTML qui tu index ?
En effet, ce ne sont pas des pages HTML mais des objets métiers PHP, ça ne change pas grand chose au processus, je construis en fait un type de document Zend_Search_Lucene_Document pour chaque type d'objet, et j'indexe donc certains de leurs attributs.
L'utilisation des regex n'est pas non plus idéale, par exemple, "je suis gourmand" => "je sui gourmand", mais comme je les utilise avant l'indexation et avant la recherche ça ne pose pas trop de problèmes.
Si tu creuses plus le sujet et trouve un moyen d'améliorer le système, n'hésites pas à m'en faire part, ça m'intéresse
A+
Nicolas
Hors ligne