Comme promis, voila un ticket sur Sphinx, un des moteurs de recherche les
plus efficace.
Développeur Web pour IPB à mes temps perdus et tres sensibles à
l'optimisation du code, j'ai remarqué que sur les gros forums d'Invision, le
moteur de recherche FullText est une vraie "merde" dès que le nombre de message
deviens trop important. En effet il faut plusieurs secondes pour obtenir un
resultat. Un autre problemes rencontrés aussi est la limite de 3 caractères
lors de la recherche, cette limite est tres contrainante impossible de
recherche des mots tres courant (surtout en informatique) comme IP, SIP, MSN,
MAC, PHP, IPB.... et le probleme est tres génant aussi pour le reference des
produits qui sont tres courant...
J'avais commencé l'année derniere un moteur de recherche alternatif pour IPB pour un gros site d'actualité francais (avec un forum IPB) en utilisant le projet Xapian, ca a jamais debouché complement et Xapian était tres efficace mais
- Nécessite un module pour Apache
- Indexation très longue et complexe à mettre en place
- Peu de documentation sur la version PHP et requete dur à construire (projet surtout prévu pour du C & co)
Pendant mes "vacances d'été", j'avais commencé à me lancer dans le portage
du moteur de recherche utilisant Xapian pour la derniere version d'IPB. Suite à
une news sur le site SDZ
a propos de leur probleme de moteur de recherche, un des developpeurs du site a
dit qu'il travaillait sur l'utilisation de Sphinx pour remplacer MySQL
FullText. Je me suis donc interressé à Sphinx.
et j'ai trouvé un petit projet sympa ! Un développeur qui avait rendu
public son moteur de recherche texte integrale après avoir rien trouvé sur
Internet
Fonctionnalités de Sphinx
- Support de Mysql, PostreSQL, "XML"
- Indexation rapide (moins de 5min pour 2millions de messages)
- Plusieurs modes de recherche (Correspondance tous les mots, Correspondance une phrase, Correspondance "boolean"...)
- Recherche très rapide

- Support de la recherche décentralisé
- Intregration simple grace aux API (Actuellement PHP et Python officielles )
- Support de soundex et stemmer (Algo pour optimiser la recherche suivant la langue)
Inconvénients (avis perso)
- Pas de support encore du wildcard (une recherche type mang*)
- Pas de paquet (rpm, deb...) pour les principales distro
- Pas de Wiki pour aider dans la documentation actuellement la documenation n'est pas complement à jour et ca pourrait etre interresant d'avoir une documentation "multi langue"
- Pas de CVS/SVN/Trac enfin... il y a un CVS mais il tourne sur la machine de l'auteur et pas d'acces public ! ca serai plus d'interresant d'avoir un CVS public, ca permet de pouvoir recuperer plus facilement le code et un Trac permettrait une gestion des bugs actuellements ca se passe sur le forum :s
J'ai déjà demander plusieurs fois à l'auteur de mettre en place un SVN avec
Trac 
Je recommande d'utiliser la version 0.9.7rc2 (actuellement) elle corrige
beaucoup de bugs et rajoute le support de plusieurs attributs pour la recherche
et un nouveau mode de recherche (mode étendu qui permet de mixer les differents
types de recherche)
Indexation avec Sphinx
Sphinx n'indexe pas les messages en direct (à l'inverse du FullText de MySQL),
il faut donc relancer l'indexation de la base souvent (le souvent depend des
besoins pour une forum une 15aine de minutes suffisent). Sphinx propose un
"schema" main + delta qui permet d'eviter une reindexation complete de la base
(les anciens messages n'ont pas besoin d'etre reindexer souvent)
Le principe est assez simple
on dispose 2 tables, le main et le delta.
La table main contient l'ensemble de base, on la met à jour une fois par jour,
puis toutes les 15 minutes, on met à jour la table delta qui contient les
nouveaux messages non indexé dans la table main donc l'indexation de la table
dure qqes secondes et cela permet d'avoir un index à jour (il n'est pas
possible de mettre à jour une table actuellement, c'est un projet et encore
experimentale actuellement)
Sphinx permet après de faire une recherche directement sur les 2
bases
SphinxForIPB
Au final, j'ai donc sorti SphinxForIPB qui permet de remplacer le moteur de
recherche d'IPB. La modification ne demande aucune modification de fichier IPB
et rajoute uniquement une nouvelle table dans la base de donnée et modifie un
settings du PCA (on peux revenir en mode normal/FullText très facilement).
SphinxForIPB tourne depuis un bon mois sur Macbidouille et la recherche est
devenu un vrai bonheur à utiliser (ultra rapide) et beaucoup moins de probleme
de lock de table et de ralentissement du forum
PCinpact a annoncé recement utilisé Sphinx pour le moteur de recherche de
leur site
et va bientot utiliser ma mod SphinxForIPB sur leur forum

Pour plus d'information,
le site officiel de
Sphinx,
un comparatif des moteurs de recherche du moment
Documentation SphinxForIPB sur le Wikinvision
Annonce PCinpact