> SphinxForIPB

Sommaire

[modifier] Sphinx For IPB

Sphinx pour IPB est une modification qui permet d'utiliser le moteur de recherche [Sphinx] dans IPB.

Sphinx est un moteur de recherche full text (ou encore texte intégrale) ecrit en C++, il permet de réaliser des recherches très rapidement sur des grosses bases de données.

Auteur : Prolag
Mail : Prolag AT gmail DOT com
Compatible : IPB 2.1 et IPB 2.2
Compatible Sphinx : >= 0.9.7

[modifier] But de la modification

Un des défauts d'IPB est qu'il supporte assez mal les gros forums (plusieurs millions de posts), il faut souvent passer la base au format [innodb], le probleme est que ce format de base est très lent pour la recherche de texte. Il n'est pas aussi limité au niveau de la taille des mots recherchés (comme le mode FullText de MySQL), il est donc possible de réaliser des recherche sur des mots d'une lettre (SphinxForIPB limite la recherche à 2 lettres). SphinxForIPB ne modifie aucun fichier d'IPB, il est très facilemenet possible de retourner en arriere !

Cette modification est uniquement pour les gros forums, elle demande un accès "Administrateur (root) sur la machine ou est hebergé le forum

[modifier] Avantage de Sphinx par rapport au moteur de recherche d'IPB

  • Recherche très rapide ( < 0.01 secondes)
  • Permet d'utiliser un format innoDB pour sa base des forums
  • Permet des recherches sur des mots de 2 ou 3 lettres (IP, PHP, IPB.....)
  • Permet une décentralisation de la recherche (serveur dedié pour la recherche)
  • Permet de créer une liste de mot à ne pas indexer / rechercher.

[modifier] Guide d'installation

[modifier] Introduction

Récupérer SphinxForIPB dans l'Espace de Téléchargement d'[Invision Board France] Le zip contient les fichiers suivants

  • Changelog.txt Changelog de SphinxForIPB...
  • ipb_settings_sphinx.xml Fichier de Settings pour IPB
  • search_mysql_sphinx.php Fichier pour IPB pour réaliser la recherche Sphinx
  • sphinx_ipb.conf Fichier de configuration Sphinx
  • sphinx_ipb_with_comment.conf Fichier de configuration Sphinx avec commentaire (pour aider à la compréhension des options)
  • SphinxForIPB21_FR.txt Guide d'installation en Français pour Sphinx For IPB
  • SphinxForIPB21_US.txt Guide d'installation en Anglais pour Sphinx For IPB

[modifier] Compilation et installation du Sphinx

Récupérer sur le site de Sphinx http://www.sphinxsearch.com/ la version 0.9.7 de Sphinx

Dans un bash

./configure --with-mysql
make

puis en root :

make install

Sphinx est maintenant installé :

  • /usr/local/bin contient les executables indexer qui s'occupe d'indexer la base de donnée et searchd le deamon pour réaliser des recherches.
  • /usr/local/etc/ contient les fichiers de configuration de sphinx

[modifier] Copie de fichier

Copier le fichier sphinx_ipb.conf dans usr/local/etc, puis éditer le fichier et completer les informations en rapport avec votre serveur MySQL

source ipb
{
	
	        type                            = mysql
	        strip_html                    = 0
	        index_html_attrs          =
	
	        sql_host                       = localhost
	        sql_user                       = root
	        sql_pass                       =
	        sql_db                          = sphinx
	        sql_port                        = 3306
 }

Note : Si vous n'utilisez pas le préfix par défaut (ibf_), modifier tous les préfix par les votres.

Uploader search_mysql_sphinx.php dans sources/lib Uploader aussi le fichier sphinxapi.php (disponible dans le dossier api de l'archive Sphinx) dans sources/lib

Aller dans PHPMyadmin

Exécuter la requête suivante pour créer une nouveau table

CREATE TABLE ibf_sph_counter(
 counter_id INTEGER PRIMARY KEY NOT NULL,  
 max_doc_id INTEGER NOT NULL
);

[modifier] Contruction des Index + Lancement Index

Maintenant il reste plus qu'à indexer la base dans un terminal taper :

/usr/local/bin/indexer --config /usr/local/etc/sphinx_ipb.conf --all

Une fois terminé lancer le daemon de recherche

/usr/local/bin/searchd --config /usr/local/etc/sphinx_ipb.conf 

Se rendre ensuite dans le PCA, dans l'onglet Tools & Settings, dans le menu "View All General Settings" En bas dans le page dans "XML settings file tools" Selectionner le fichier xml "ipb_settings_sphinx.xml" puis cliquer sur Import puis dans Search Set-UP et mettre SphinxForIPB dans le champs "Type of search to use" Maintenant vous pouvez faire des recherches :)

[modifier] Tâches Cron

L'index n'est pas automatiquement mis à jour à chaque nouveau message, il faut donc périodiquement le mettre à jour. La reconctruction complète de l'index est une tâche assez longue (quelques minutes) et qui consomme beaucoup de ressource. SphinxForIPB utilise le "schéma" main+delta ([Documentation]) qui permet de reconstruire simplement les derniers messages. Pour automatiser cette reconctruction d'index, vous devez utiliser les tâches crons une premiere tâche qui tourne toutes les 15 minutes et qui recontruit l'index des derniers posts

/usr/local/bin/indexer --config /usr/local/etc/sphinx_ipb.conf ipb_search_posts_delta ipb_search_topics --rotate

une seconde tâche qui tourne toutes les nuits (vers 4h du mat) qui va recontruire l'index complet

/usr/local/bin/indexer --config /usr/local/etc/sphinx_ipb.conf --all --rotate

Editer son crontab en conséquence

[modifier] Option & Tuning

[modifier] Débug

Pour connaître le temps de recherche et d'autres informations sur la recherche sphinx, un débug est disponible il suffit d'éditer le fichier init.php (à la source de votre forum) et de mettre IN_DEV à 1

[modifier] Mode de Recherche

Sphinx propose actuellement 4 modes de recherches :

  • SPH_MATCH_ALL il faut avoir tous les mots recherchés dans le texte (peu importe l'ordre)
  • SPH_MATCH_ANY il suffit d'un des mots recherchés)
  • SPH_MATCH_PHRASE Recherche une phrase (les mots recherchés sont à la suite ex : "petite maison")
  • SPH_MATCH_BOOLEAN Recherche de type boolean (utilisation des opérateur + - | ...)
  • SPH_MATCH_EXTENDED Recherche mixte (mode boolean, support des guillements...)

SphinxForIPB utilise le mode SPH_MATCH_EXTENDED, c'est celui qui ressemble le plus au fonctionnement du moteur de recherche d'IPB. Il est possible de changer cela, en modifieant le fichier mysql_search_sphinx.php à la ligne

$sphinx_posts->SetMatchMode(SPH_MATCH_EXTENDED) et $sphinx_topics->SetMatchMode(SPH_MATCH_EXTENDED) remplacer SPH_MATCH_EXTENDED' par le mode de recherche voulu.

[modifier] Accents

Sphinx est sensible aux accents donc la recherche du mot sécurité et securite ne donnera pas les mêmes reponses Pour rendre Sphinx insensible aux accents, ajouté dans le fichier sphinx_ipb.conf

dans ipb_search_posts_main après charset_type

charset_table		= 0..9, A..Z->a..z, _, a..z, \
                                U+C0->a, U+C1->a, U+C2->a, U+C3->a, U+C4->a, U+C5->a, U+C6->a, \
                                U+E0->a, U+E1->a, U+E2->a, U+E3->a, U+E4->a, U+E5->a, U+E6->a, \
                                U+C7->c,U+E7->c, \
                                U+C8->e, U+C9->e, U+CA->e, U+CB->e, U+E8->e, U+E9->e, U+EA->e, U+EB->e, \
                                U+CC->i, U+CD->i, U+CE->i, U+CF->i, U+EC->i, U+ED->i, U+EE->i, U+EF->i,

Réaliser la même opération dans ipb_search_topics

Reconstruire tous les index apres cette modification

[modifier] Soundex

Le Soundex est un algorithme phonétique d'indexation, il permet de retrouver des mots à la prononication identique (mer, mere, maire...) (plus [d'information] Cette algorithme est optimisé pour la langue anglaise, on trouve des [versions optimisés] pour la langue francaise, j'ai adapté personnement l'algorithme pour Sphinx

Pour utiliser les soundex dans Sphinx, ajouté dans le fichier sphinx_ipb.conf

dans ipb_search_posts_main après docinfo mettre

morphology  = soundex ou soundex_fr pour la version française du Soundex 

Réaliser la même opération dans ipb_search_topics

Reconstruire tous les index apres cette modification

[modifier] IP.Blog

Si vous disposez du module IP.BLOG, quand SphinxForIPB est activé, vous obtenez l'erreur suivante :

IPB WARNING [2] blog_search::require(/home/www/public_html/forum/modules/blog/lib/search_mysql_sphinx.php) [function.blog-search-require]: failed to open stream: No such file or directory (Line: 63 of /modules/blog/search.php)


Pour corriger cela, aller dans le dossier /modules/blog/lib puis copier le fichier search_mysql_ftext.php en le renommant search_mysql_sphinx.php

[modifier] Stopword

Il est possible de filtrer des mots à ne pas indexer pendant la recherche, (par exemple des mots trop courant : le, la, les ..).

Un fichier qui contient environ 40 mots les plus utilisés est disponible dans le zip de SphinxForIPB, il suffit de le copier dans le dossier /var/data/

puis dans ipb_search_posts_main après morphology

Mettre

stopwords = /var/data/stopwords_fr.txt

Réaliser la même opération dans ipb_search_topics

Reconstruire tous les index apres cette modification

[modifier] Serveur dedié à la recherche

Dans le cas, ou vous disposez de plusieurs serveur web et un serveur MySQL et que vous ne voulez pas mettre Sphinx sur votre serveur Mysql car deja bien chargé il est possible de mettre Sphinx sur un serveur dedié à cela ! Pour d'information sur comment réaliser ce mode de fonctionnement me contacter !

[modifier] Aide et Support

L'aide et le support est réalisé sur le topic dedié à SphinxForIPB sur Invision Board France.

Pour les Anglophones :

Pour les demandes spéciales (serveur dedié à la recherche...) me contacter par e-mail : Prolag AT gmail DOT COM.

Pour suivre l'actualité de Sphinx et de SphinxForIPB, direction Mon Blog

[modifier] Forums utilisant SphinxForIPB

[Neowin.net] Forum Anglais sur l'actu informatique (> 6,6 millions de messages)
[crazymoto.net] Forum Français sur la moto (> 3,7 millions de messages)
[Macbidouille.com] Forum Francophone de la bidouille sous Mac ;) (> 2millions de messages)
[PcInpact.com] Forum Français sur l'actu PC (> 1,7 millions de messages)
[ForumFr.com] Forum ForumFR.com (> 400 000 de messages)
[Netgear-forum.com] Forum d'entraide au utilisateurs des produits NETGEAR (> 250 000 de messages)

Bientot le votre ?? ;)

--Prolag 25 nov 2006 à 22:02 (CET)