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, );
Et nous voulons 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).
