Sphinx est un moteur de recherche full-text, distribué sous GPL v2. (Une licence commerciale est disponible)
En gros, c’est un moteur de recherche à part entière, crée pour fournir des fonctions de recherches rapides et pertinentes pour d’autres applications. Sphinx a été fait en particulier pour s’intégrer facilement avec des base de données SQL et des languages de scripts (typiquement, le couple PHP/MySQL). Pour l’instant les sources de données peuvent être des bases de donnée MySQL ou PostgreSQL, mais aussi des flux XML.
Base de donnée à indexer
Au début, nous avons donc notre base de donnée, par exemple:
CREATE TABLE items ( item_id integer NOT NULL, item_title character varying(255) NOT NULL, item_description text NOT NULL, item_date timestamp without time zone NOT NULL, item_link character varying(255) NOT NULL, cat_id integer NOT NULL, );
On peut faire des recherches dans le titre (item_link
), dans le contenu (item_description
) ou dans l’url (item_link
).
En plus, il faudrais pouvoir trier par date (cat_date
) ou par catégorie (cat_id
)
La première étape est de créer le fichier de configuration de sphinx
Fichier de conf de base
Voila de quoi créer un sphinx.conf pour notre base de donnée
# nom de l'index : "main" source main { type = pgsql sql_host = localhost sql_user = utilisateur sql_pass = motdepasse # nom de la base de donnée sql_db = database sql_query = \ SELECT item_id, cat_id, item_title, item_description, item_date, \ ROUND(EXTRACT( EPOCH FROM ABSTIME(item_date) ))::int4 AS item_ts \ FROM items sql_attr_uint = cat_id sql_attr_timestamp = item_ts } index main { source = main path = /home/foo/var/lib/sphinx/main docinfo = extern morphology = none # Cette conf de base marche bien en général # Pour l'adapter à vos besoins voir l'exemple de fichier de configuration complet enable_star = 0 min_word_len = 2 min_prefix_len = 0 min_infix_len = 3 charset_type = utf-8 html_strip = 1 }
Pour indexer la base :
il faut taper la commande suivante: indexer -c sphinx.conf main
(rajouter –rotate si searchdest en train d’utiliser l’index)
Suivant la taille des données à indexer cela peut prendre un peu de temps. Par exemple :
Sphinx 0.9.8.1-release (r1533) Copyright (c) 2001-2008, Andrew Aksyonoff using config file '/home/foo/var/sphinx.conf'... indexing index 'main'... collected 20786 docs, 6.8 MB sorted 17.4 Mhits, 100.0% done total 20786 docs, 6829246 bytes total 9.729 sec, 701969.94 bytes/sec, 2136.57 docs/sec rotating indices: succesfully sent SIGHUP to searchd (pid=11367).
A vos claviers ^^ .