Introduction
Pour comprendre l’intérêt du plugin, nous invitons à lire l’article suivant Indexer : Introduction. Le fonctionnement de la boucle SPHINX est expliqué dans cet article :
Indexer : La boucle SPHINX. La suite de l’article aborde uniquement l’installation et la configuration du plugin Indexer et du moteur Sphinx .
Rappel pour les lecteurs inattentifs, il faut installer Sphinx en plus du plugin.
Compatibilité
Le plugin Indexer
(compatible SPIP 2.1 et SPIP 3.x) exploite le mode RT (real-time), l’API mysql, et les fonctionnalités JSON de Sphinx. Pour cette raison il ne fonctionne qu’à partir de la version 2.2 de Sphinx.
Note : l’ancien plugin SPIP Sphinx
(doc) exploite le mode standard de Sphinx, et son API native.
Description technique
Le mode RT de Sphinx permet à tout moment d’enrichir ou d’actualiser les contenus de Sphinx, par l’intermédiaire de requêtes proches de l’écriture SQL, et donc assez familières. Ainsi, le plugin Indexer
actualise l’index de Sphinx après chaque modification d’un contenu dans SPIP. La page exec=indexer
permet d’indexer ou de réindexer tous les contenus du site.
Le plugin intègre quelques documentations :
http://zone.spip.org/trac/spip-zone/browser/_plugins_/indexer/trunk/doc
Notamment, par défaut, il utilise un index nommé ’spip’. Cet index Sphinx ressemble beaucoup à une table SQL. Chaque entrée dans l’index est appelé un document. Ici, un document possède certains champs assez communs, qui sont détaillés dans la documention de l’indexation.
Installation de Sphinx
Sphinxsearch fournit un ensemble de paquets selon les environnements serveurs (Windows, Linux, Debian, ....) depuis la page :
http://sphinxsearch.com/downloads/release/
Le point important est de prendre un version supérireure à 2.2
L’installation est à effectuer selon votre environnement (exe, yum, apt-get/aptitude, ....)
Vous pouvez contrôler le bon fonctionnement de Sphinx via la commande suivante (à exécuter en root ou assimilé)
searchd
Création de la configuration Debian et dérivés
Il faut créer le fichier de configuration de sphinx dans /etc/sphinx/sphinx.conf
.
Un fichier d’exemple est fourni avec le paquet debian/ubuntu.
Nous pouvons utiliser du PHP pour gérer la configuration dans des fichiers séparés dans /etc/sphinx/conf.d-enabled/
ou /etc/sphinxsearch/conf.d-enabled/
. On en profite pour créer le répertoire manquant sous Ubuntu/Debian :
Fichier /etc/sphinx/sphinx.conf
ou /etc/sphinxsearch/sphinx.conf
#!/usr/bin/env php
<?php
# Correction bug paquet debian / ubuntu
if (!is_dir('/var/run/sphinx')) {
mkdir('/var/run/sphinx');
}
# Recherche et inclusions des configurations
foreach (glob(__DIR__ . '/conf.d-enabled/*.conf') as $conf) {
include $conf;
}
Créer le répertoire /etc/sphinx/conf.d-enabled
ou /etc/sphinxsearch/conf.d-enabled
(et éventuellement conf.d-available
)
Dans conf.d-enabled, mettre :
- le fichier 1_charsets.conf
- Remarque : C’est un script il doit donc avoir les droits d’exécution.
- le fichier searchd.conf :
On précise les IP d’écoute, pour restreindre au serveur local pensez à mettre 127.0.0.1 et non l’ip publique de votre serveur.
On peut noter que searchd fournit par défaut des connecteurs sur divers ports :
- API interface « native » 9312
listen = 127.0.0.1:9312
- API interface « SphinxQL » 9306
listen = 127.0.0.1:9306:mysql41
Le plugin Indexer n’utilise que l’inteface SphinxQL, il est donc tout à fait possible de désactiver l’interface 9312.
Si le répertoire de référence est sphinxsearch et non sphinx, pensez à corriger la config suivante en actualisant les chemins.
searchd
{
# [hostname:]port[:protocol], or /unix/socket/path to listen on
# known protocols are 'sphinx' (SphinxAPI) and 'mysql41' (SphinxQL)
# listen = 9306:mysql41
listen = 127.0.0.1:9306:mysql41
pid_file = /var/run/sphinx/searchd.pid
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
binlog_path = /var/lib/sphinx/
}
- le fichier spip.conf :
index spip{ type = rt path = /var/lib/sphinxsearch/data/spip rt_field = title rt_attr_string = title rt_field = summary rt_attr_string = summary rt_field = content rt_attr_string = content rt_attr_timestamp = date rt_attr_timestamp = date_indexation rt_attr_string = uri rt_attr_json = properties rt_attr_string = signature <?php echo _CHARSET_INDEXATION_FR ; ?> }
Relancer le démon searchd une fois ceci effectué :
sudo searchd --stop
sudo searchd
# ou
sudo service sphinxsearch restart
Tester que Sphinx est bien lancé
Se connecter à Sphinx via le client mysql ou mariadb :
mysql -h0 -P9306
Quelques commandes :
-
show tables;
: liste l’ensemble des indexes -
describe spip;
: décrit les champs d’un index
> show tables;
+-------+------+
| Index | Type |
+-------+------+
| spip | rt |
+-------+------+
1 row in set (0.00 sec)
> describe spip;
+------------+-----------+
| Field | Type |
+------------+-----------+
| id | bigint |
| title | field |
| summary | field |
| content | field |
| date | timestamp |
| title | string |
| summary | string |
| content | string |
| uri | string |
| signature | string |
| properties | json |
+------------+-----------+
11 rows in set (0.00 sec)
Préparer SPIP et indexer ses articles
Si sphinx est actif (on peut se connecter à lui via mysql), on peut alors, si il est installé sur le même serveur que le site SPIP, directement l’interconnecter avec SPIP.
La configuration de base se fait dans config/mes_options.php :
define('SPHINX_DEFAULT_INDEX', 'spip');
define('SPHINX_SERVER_HOST', '127.0.0.1');
define('SPHINX_SERVER_PORT', 9306);
Pour ce faire, télécharger et activer le plugin Indexer.
Une fois actif, aller sur la page ecrire/?exec=indexer
.
L’interface est encore très sobre, mais on peut démarrer l’indexation de tous les articles du site en cliquant « démarrer ». Cela peut prendre un peu de temps en fonction de la machine et du nombre d’articles.
Une fois indexé, une page (joliment affichée si « spipr-dist » est actif) peut être visitée pour tester un peu : ?page=sphinx
. Cette page affiche un champ de recherche, ainsi que des facettes sur les auteurs, les mots clés ou la date.
Interdire les écritures
Si vous utilisez ce plugin sur un site de préproduction, la configuration suivante permet d’interdire les écritures dans la base sphinx :
define('_INDEXER_READONLY', true);
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |