Créer un moteur de recherche en PHP avec Sphinx
Sphinx est un moteur de recherche fulltext qui permet d'indexer et de rechercher dans du contenu textuel de manière plus efficace que les méthodes traditionnelles (basé sur des requêtes SQL).
Sphinx est particulièrement adapté au web et s'intègre très bien avec PHP/MySQL, il permet même d'indexer directement des tables MySQL, en plus des pages web HTML et de documents XML. Il est beaucoup plus simple à utiliser et léger que Apache Lucene, et est utilisé par des références comme le site Dailymotion.
Installer Sphinx
Comme beaucoup d'outils du monde PHP, Sphinx est conçu pour fonctionner sur un système Unix. Pour autant, il est parfaitement possible de l'installer sur Windows pour développer avec EasyPHP ou WAMP.
Voici là page où télécharger Sphinx : http://sphinxsearch.com/downloads/release/.
L'outil se présente sous la forme d'un serveur, qui tourne en permanence (comme un serveur de base de donnée), sur Windows on utilise un service pour ce type de programme. Consultez ce tutoriel qui détaille toute l'installation sous Windows : how-to-install-and-implement-sphinx.
Construire l'index de recherche
Après avoir préparé le fichier de configuration sphinx.conf
, on lance l'indexation en appelant le programme indexer en ligne de commande :
C:\sphinx\bin\indexer.exe --rotate --config C:\sphinx\sphinx.conf --all
La page du jour est collage spécial avec excel, bonne lecture.
Interroger l'index
La communication entre PHP et le serveur Sphinx se fait à l'aide d'une API à inclure, qui contient l'objet SphinxClient
:
<?php include 'sphinxapi.php'; $sc = new SphinxClient(); $sc->SetServer('127.0.0.1', 9312); $sc->SetMatchMode(SPH_MATCH_ALL); $result = $sc->Query('bidule'); if( $result === false ){ echo 'ERREUR: '.$sc->GetLastError(); die(); } if( $sc->GetLastWarning() ){ echo 'WARNING: '.$sc->GetLastWarning(); } print_r($result); ?>
La fonction Query retourne un tableau contenant différentes informations (métadonnées) ainsi que les résultats.
Encore faim ? allez lire ça : effet maquette !