Menu

#123 Recherche inefficace / inefficient search

1.2.x
open
nobody
5
2007-02-08
2007-02-08
No

Après installation de Plume CMS 1.2.2 chez l'hébergeur 1and1, que ce soir sous PHP 4 ou PHP5, j'ai constaté ces problèmes graves par rapport à la recherche. Je ne pense pas que l'hébergement y soit pour quelque chose. Ces problèmes persistent aussi que ce soit en HTML ou Wiki.

– problème d'accentuation avec le champ de recherche de la page web (déjà reporté ici).
– les mots clefs sont censé être séparés par des virgules, mais quand je regarde dans la table mysql plume_searchwords, il sont en fait séparés par les espaces, et quand on met des virgules, elles sont ajoutées dans le mot, ce qui le rend introuvable (exemple si j'ai "mot1, mot2 composé, mot3" dans les mots clefs, et bien dans les indexes j'aurais "mot1," "mot2" "compa" <- problème d'accentuation toujours "mot3" ainsi une recherche sur "mot1" ne trouvera pas à cause de la virgule dans l'index).
– comme précité, il semble que les accents posent problème aussi dans l'indexation des articles et pas seulement dans la page web.
Dans la table plume_searchwords, les "é" sont remplacés par des a, ainsi "boufé" devient "boua", accentué" devient "accentua", et je ne sais pourquoi, "pas" est devenu "pasa", mais il y avait peut-être une ponctuation comme "pas." ou une espace insécable.
J'ai bien essayé de changer un peu le code, en supprimant le commentaire devant utf8_decode, mais je n'ai pas de vrai succès.
N'y a-t-il pas moyen ici, lorsqu'on utilise l'utf-8 de simplifier les choses en stockant les mots accentués (bref les caractères utf8) dans les indexes, puis en gardant les caractères utf8 dans les recherches ? Il me semble que mysql gère bien cela et une recherche de "tête" trouvera aussi bien "tete" que "tété"… En plus cela simplifierait le code de Plume, du moins pour l'utf-8.

De même dans la fonction split_words, il faut supprimer la ponctuation (avec un regexp ?) quand dans un texte on a "unmot, unautre" une recherche de "unmot" ne donnera rien à cause de la virgule gardée dans l'index (idem avec le point et toute la ponctuation…)

Et il faudrait aussi faire une fonction de split spécifique pour les mots clefs, qui ne coupe pas les espaces pour les mots composés, mais coupe bien aux virgules (en les supprimant comme pour le reste…) Cela afin de respecter ce qui est indiqué dans l'aide lors de la rédaction d'un article.

Discussion

  • Gabriel ROUSSEAU

    une copie de ma table plume_searchwords

     
  • Claude Castaing

    Claude Castaing - 2007-07-04

    Logged In: YES
    user_id=1835846
    Originator: NO

    Il semble qu'il suffise de décommenter comme suis pour rectifier le
    problème de moteur de recherche et d'indexation (mélange balise html,
    problème d'accents ...) les lignes présente dans la fonction
    clean_string($string) du fichier /manager/inc/class.search :

    function clean_string($string)
    {
    //include_once dirname(__FILE__).'/lib.text.php';
    //$string = text::removeEntities($string);
    //if (strtolower(config::f('encoding') == 'utf-8')) {
    //$string = utf8_decode($string);
    //}
    $string =
    strtr($string,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèé
    êëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñçÇ","AAAAAAaaaaaaOOOOOOooooooEE
    EEeeeeIIIIiiiiUUUUuuuuyNncC");
    $string = preg_replace('/[_]{2,}/', ' ', $string);
    //$string = preg_replace('/[^a-zA-Z0-9_\-\s]/', ' ', $string);
    return $string;
    }

    Remplacer par :

    function clean_string($string)
    {
    include_once dirname(__FILE__).'/lib.text.php';
    $string = text::removeEntities($string);
    if (strtolower(config::f('encoding') == 'utf-8')) {
    $string = utf8_decode($string);
    }
    $string =
    strtr($string,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèé
    êëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñçÇ","AAAAAAaaaaaaOOOOOOooooooEE
    EEeeeeIIIIiiiiUUUUuuuuyNncC");
    $string = preg_replace('/[_]{2,}/', ' ', $string);
    $string = preg_replace('/[^a-zA-Z0-9_\-\s]/', ' ', $string);
    return $string;
    }

    NE PAS OUBLIER DE REINDEXER les ressources depuis le manager et de cliquer sur le lien : "Retirer de l'index les mots non utilisés" (cf. bas de page Maintenance de l'index)

     

Log in to post a comment.

MongoDB Logo MongoDB