Magazine Informatique

phpBB 3 - Tout sur la fonction de recherche

Publié le 25 janvier 2009 par Paul

Lorsque j’ai effectué la migration du forum Motorsport-Passion de phpBB2 vers phpBB3, j’ai rencontré pas mal de problèmes relatifs à la fonction de recherche. En premier lieu il faut choisir une des deux méthodes (nouveauté phpBB3) d’indexation de la recherche, bien comprendre leur fonctionnement et procéder à la reconstruction de l’index de recherche. La régénération de mon index de recherche prenait des plombes, elle n’en finissait jamais, des mots n’étaient pas pris en compte et restaient donc introuvables, etc… J’ai donc un peu galéré et lu pas mal de doc afin de procéder à la synthèse suivante qui vous en apprendra, je l’espère, quelques subtilités à propos de la fonction “rechercher” du moteur de forum (CMS) : phpBB3.

 

Le “front-end” vu par les visiteurs

Tout d’abord une capture d’écran de la fonction “recherche” de phpBB3 comme elle est vue par les visiteurs (front-end).

Pour mener à bien la recherche effectuée par le visiteur, vous devez spécifier au système, quelle méthode d’indexation il doit utiliser.

Deux méthodes d’indexation de la recherche

phpBB3 propose donc désormais deux méthodes d’indexation de la recherche : Fulltext MySQL et Fulltext Native. La méthode utilisée par phpBB2 (et sélectionnée par défaut dans phpBB3) étant la Fulltext Native. Détaillons un peu tout ça…

Pourquoi cette nouvelle méthode “Fulltext MySQL” ?

La méthode Fulltext MySQL n’était pas implémentée dans phpBB2, probablement parce que la recherche en texte intégral (Fulltext) n’est apparue qu’à partir de la version 3.23.23 de MySQL. Voyons comment fonctionnent ces deux méthodes de recherches et nous verrons plus tard leurs différences essentielles.

Méthode “Fulltext Native”…

Cette méthode consiste à utiliser plusieurs bases MySQL dans lesquelles seront stockés (plus ou moins) tous les mots utilisés dans les messages du forum. Pour faire simple : 1 mot = 1 fiche (enregistrement) dans la table. Le principal inconvénient de cette méthode réside dans le fait que l’on se retrouve rapidement avec une table (phpbb3_search_wordmatch) composée de plusieurs centaines de milliers (voire même millions) d’enregistrements -> bah oui, des mots il y en a beaucoup hein

phpBB 3 - Tout sur la fonction de recherche
La méthode Fulltext Native repose donc principalement sur 3 tables nommées phpbb_search_results, phpbb_search_wordlist et phpbb_search_wordmatch qui contiennent respectivement, les dernières recherches effectuées, l’ensemble des mots indexés pour la recherche (+/- tous les mots des messages) et toutes les associations entre les mots indexés et les messages.

Méthode “Fulltext MySQL”…

Comme MySQL supporte désormais la recherche sur l’ensemble d’un champ TEXT (fulltext), il est donc en mesure de rechercher une chaine de caractères directement au sein des messages. Schématiquement, lors d’une recherche, le système va donc “lire” tous les messages pour identifier ceux qui correspondent à la chaine de caractères (les mots utilisés pour la recherche) désirée. La méthode Fulltext MySQL n’a donc absolument pas besoin des trois tables sus-citées. Je n’ai pas essayé de les supprimer et je ne peux donc pas vous conseiller de le faire sans risque. Néanmoins, si vous n’utilisez absolument plus la méthode Fulltext Native, vous pouvez les vider.

Condition nécessaire à l’utilisation de la méthode Fulltext MySQL

Vous ne pouvez utiliser la méthode Fulltext MySQL que si votre phpBB3 utilise des tables de type MyISAM. Si vous souhaitez utiliser cette méthode, et après avoir effectué une sauvegarde, vous pouvez tenter de convertir vos tables “non MyISAM” en “MyISAM” par l’intermédiaire de la requête SQL présentée ci-dessous. Vérifiez bien que toutes les tables nécessaires au fonctionnement de phpBB3 soient listées (la requête est faite pour les tables de base d’un phpBB3 non MODDé) et qu’elles soient bien préfixées “phpbb_” avant d’exécuter la requête.

  1.            
  2.             ALTER TABLE phpbb_acl_groups ENGINE=MyISAM;
  3.             ALTER TABLE phpbb_acl_options ENGINE=MyISAM;
  4.             ALTER TABLE phpbb_acl_roles ENGINE=MyISAM;
  5.             ALTER TABLE phpbb_acl_roles_data ENGINE=MyISAM;
  6.             ALTER TABLE phpbb_acl_users ENGINE=MyISAM;
  7.             ALTER TABLE phpbb_attachments ENGINE=MyISAM;
  8.             ALTER TABLE phpbb_banlist ENGINE=MyISAM;
  9.             ALTER TABLE phpbb_bbcodes ENGINE=MyISAM;
  10.             ALTER TABLE phpbb_bookmarks ENGINE=MyISAM;
  11.             ALTER TABLE phpbb_bots ENGINE=MyISAM;
  12.             ALTER TABLE phpbb_config ENGINE=MyISAM;
  13.             ALTER TABLE phpbb_confirm ENGINE=MyISAM;
  14.             ALTER TABLE phpbb_disallow ENGINE=MyISAM;
  15.             ALTER TABLE phpbb_drafts ENGINE=MyISAM;
  16.             ALTER TABLE phpbb_extensions ENGINE=MyISAM;
  17.             ALTER TABLE phpbb_extension_groups ENGINE=MyISAM;
  18.             ALTER TABLE phpbb_forums ENGINE=MyISAM;
  19.             ALTER TABLE phpbb_forums_access ENGINE=MyISAM;
  20.             ALTER TABLE phpbb_forums_track ENGINE=MyISAM;
  21.             ALTER TABLE phpbb_forums_watch ENGINE=MyISAM;
  22.             ALTER TABLE phpbb_groups ENGINE=MyISAM;
  23.             ALTER TABLE phpbb_icons ENGINE=MyISAM;
  24.             ALTER TABLE phpbb_lang ENGINE=MyISAM;
  25.             ALTER TABLE phpbb_log ENGINE=MyISAM;
  26.             ALTER TABLE phpbb_moderator_cache ENGINE=MyISAM;
  27.             ALTER TABLE phpbb_modules ENGINE=MyISAM;
  28.             ALTER TABLE phpbb_poll_options ENGINE=MyISAM;
  29.             ALTER TABLE phpbb_poll_votes ENGINE=MyISAM;
  30.             ALTER TABLE phpbb_posts ENGINE=MyISAM;
  31.             ALTER TABLE phpbb_privmsgs ENGINE=MyISAM;
  32.             ALTER TABLE phpbb_privmsgs_folder ENGINE=MyISAM;
  33.             ALTER TABLE phpbb_privmsgs_rules ENGINE=MyISAM;
  34.             ALTER TABLE phpbb_privmsgs_to ENGINE=MyISAM;
  35.             ALTER TABLE phpbb_profile_fields ENGINE=MyISAM;
  36.             ALTER TABLE phpbb_profile_fields_data ENGINE=MyISAM;
  37.             ALTER TABLE phpbb_profile_fields_lang ENGINE=MyISAM;
  38.             ALTER TABLE phpbb_profile_lang ENGINE=MyISAM;
  39.             ALTER TABLE phpbb_ranks ENGINE=MyISAM;
  40.             ALTER TABLE phpbb_reports ENGINE=MyISAM;
  41.             ALTER TABLE phpbb_reports_reasons ENGINE=MyISAM;
  42.             ALTER TABLE phpbb_search_results ENGINE=MyISAM;
  43.             ALTER TABLE phpbb_search_wordlist ENGINE=MyISAM;
  44.             ALTER TABLE phpbb_search_wordmatch ENGINE=MyISAM;
  45.             ALTER TABLE phpbb_sessions ENGINE=MyISAM;
  46.             ALTER TABLE phpbb_sessions_keys ENGINE=MyISAM;
  47.             ALTER TABLE phpbb_sitelist ENGINE=MyISAM;
  48.             ALTER TABLE phpbb_smilies ENGINE=MyISAM;
  49.             ALTER TABLE phpbb_styles ENGINE=MyISAM;
  50.             ALTER TABLE phpbb_styles_imageset ENGINE=MyISAM;
  51.             ALTER TABLE phpbb_styles_imageset_data ENGINE=MyISAM;
  52.             ALTER TABLE phpbb_styles_template ENGINE=MyISAM;
  53.             ALTER TABLE phpbb_styles_template_data ENGINE=MyISAM;
  54.             ALTER TABLE phpbb_styles_theme ENGINE=MyISAM;
  55.             ALTER TABLE phpbb_topics ENGINE=MyISAM;
  56.             ALTER TABLE phpbb_topics_posted ENGINE=MyISAM;
  57.             ALTER TABLE phpbb_topics_track ENGINE=MyISAM;
  58.  
  59.             ALTER TABLE phpbb_topics_watch ENGINE=MyISAM;
  60.             ALTER TABLE phpbb_users ENGINE=MyISAM;
  61.             ALTER TABLE phpbb_user_group ENGINE=MyISAM;
  62.             ALTER TABLE phpbb_warnings ENGINE=MyISAM;
  63.             ALTER TABLE phpbb_words ENGINE=MyISAM;
  64.             ALTER TABLE phpbb_zebra ENGINE=MyISAM;

Désormais, si vous utilisez une version de MySQL supérieure ou égale à la 3.23.23 et que vos tables sont de type MyISAM, il n’y a donc presque plus aucune raison pour que vous ne puissiez pas adopter la méthode de recherche Fulltext MySQL.

Principales différences entre les deux méthodes

Pour l’heure, les possibilités de personnalisation offertes par la méthode Fulltext Native sont plus importantes et elles sont surtout paramétrables depuis le panneau d’administration de phpBB3, ce qui n’est pas le cas pour l’autre méthode. Le choix de la méthode d’indexation et les paramétrages inhérents, uniquement à la méthode Fulltext Native, se trouvent dans l’onglet Général -> Paramètres de recherche. Une petite capture d’écran…

Si vous modifiez ces paramètres, il vous faudra supprimer et reconstruire l’index de recherche Fulltext Native par l’intermédiaire de l’onglet Maintenance -> Index de recherche du panneau d’administration de phpBB3.

Comme je l’ai dit plus haut, la méthode Fulltext MySQL n’a hélas pas encore énormément de paramètres modifiables. De plus, pour les modifier, il faudra vous connecter à votre serveur via le shell afin d’éditer le fichier de configuration de MySQL my.cnf (qui se trouve généralement dans /var/db/mysql/) avec les paramètres disponibles.

Je n’ai pratiqué aucun test de charge et je ne suis donc pas en mesure de confronter les performances des deux méthodes. L’article EuroOSCON 2006 - High Performance FullText Search, disponible sur le site mysqlperformanceblog.com, peut néanmoins apporter quelques éléments de réponses. Quoiqu’il en soit, à terme, l’indexation de la recherche par la Méthode MySQL m’apparait comme la solution d’avenir, à l’inverse de la “Méthode Native phpBB”.

Exclure des mots de l’indexation

Le fichier /languages/*/search_ignore_words.php permet a priori d’exclure certains mots de l’indexation afin de limiter la charge du serveur. Il est en effet bien souvent inutile d’indexer des mots trop communs tels que : “des”, “un”, “bonjour”, “merci”, etc… Il ne faudrait quand même pas qu’un boulet vienne faire tomber le serveur SQL en cherchant “à” dans tous les messages de la base de données

phpBB 3 - Tout sur la fonction de recherche
A priori ce fichier n’est utile que si vous utilisez la méthode de recherche Fulltext Native bien que j’ai quelques doutes à ce sujet. Les documentations que j’ai pu trouver en rapport avec l’utilisation du fichier search_ignore_words.php sur phpBB3 sont assez évasives et je ne compte donc pas m’étendre davantage au sujet de ce fichier dont l’utilisation est déterminée de manière assez vague.


Sketch sur facebook…


Retour à La Une de Logo Paperblog

LES COMMENTAIRES (10)

Par Wallace
posté le 27 mai à 20:05
Signaler un abus

Envie de mieux comprendre la bourse en ligne ? http://lesoptionsbinaires.blogspot.com/

Par coloniedevacances
posté le 20 janvier à 20:55
Signaler un abus

Salut, J'arrive tous juste sur ce forum qui m'a l'air interressant. habitué des forum et gros contributeur, je suis interressé par votre concept. A bientot sur le forum

Par coloniedevacances
posté le 20 janvier à 13:10
Signaler un abus

Salut, J'arrive tous juste sur ce forum qui m'a l'air interressant. habitué des forum et gros contributeur, je suis interressé par votre concept. A bientot sur le forum

A propos de l’auteur


Paul 502 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazine