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 ^^ .