introduction
Sphinx est un moteur de recherche open source qui permet des recherches en texte intégral. Il est surtout connu pour effectuer des recherches sur des données volumineuses de manière très efficace. Les données à indexer peuvent généralement provenir de sources très différentes: bases de données SQL, fichiers de texte brut, fichiers HTML, boîtes aux lettres, etc.
-
Certaines caractéristiques clés de Sphinx sont: *
-
Indexation élevée et performances de recherche
-
Outils d’indexation et d’interrogation avancés
-
Post-traitement des résultats avancés
-
Une évolutivité prouvée pouvant atteindre des milliards de documents, des téraoctets de données et des milliers de requêtes par seconde
-
Intégration facile avec les sources de données SQL et XML et les interfaces de recherche SphinxQL, SphinxAPI ou SphinxSE
-
Mise à l’échelle facile avec des recherches distribuées
Dans ce tutoriel, nous allons configurer Sphinx avec un serveur MySQL en utilisant l’exemple de fichier SQL inclus dans le package de distribution. Cela vous donnera une idée de base sur la façon d’utiliser Sphinx pour votre projet.
Conditions préalables
Avant de commencer ce guide, vous aurez besoin de:
-
Une goutte Ubuntu 14.04.
-
Un utilisateur sudo non root, que vous pouvez configurer en suivant https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-an-ubuntu-14-04- vps [ce tutoriel].
Étape 1 - Installation du serveur MySQL
-
Remarque: * Vous ne devez remplir cette section que si le serveur MySQL n’est pas déjà installé.
Dans cette section, nous allons installer le serveur MySQL. MySQL nous permettra de stocker une base de données contenant des exemples de données que nous pourrons utiliser pour tester les capacités de recherche de Sphinx.
Mettez à jour la liste de paquets.
sudo apt-get update
Ensuite, installez le serveur MySQL.
sudo apt-get install mysql-server
Entrez un mot de passe pour l’utilisateur root à l’invite, puis ressaisissez le même mot de passe pour confirmer.
Étape 2 - Installation de Sphinx
Dans cette section, nous allons installer Sphinx.
Pour installer Sphinx, exécutez:
sudo apt-get install sphinxsearch
Vous avez maintenant installé Sphinx sur votre serveur. Avant de démarrer le démon Sphinx, laissez-le configurer.
Étape 3 - Création de la base de données de test
Dans cette section, nous allons configurer une base de données à l’aide de l’exemple de fichier SQL fourni avec le package.
Importons un exemple de fichier SQL dans la base de données.
Connectez-vous au shell du serveur MySQL.
mysql -u root -p
Entrez le mot de passe de l’utilisateur root MysQL lorsqu’il vous le sera demandé. Votre invite deviendra + mysql> +
.
Créez une base de données nommée + test
.
CREATE DATABASE test;
Importez le fichier SQL.
SOURCE /etc/sphinxsearch/example.sql;
Quittez ensuite le shell MySQL.
quit
Vous devez maintenant avoir la base de données de test remplie de données.
Étape 4 - Configuration du Sphinx
Dans cette section, nous allons configurer le fichier de configuration du Sphinx.
Créez le fichier + sphinx.conf +
.
sudo nano /etc/sphinxsearch/sphinx.conf
La configuration de Sphinx se compose de 3 blocs principaux indispensables à l’exécution. Ils sont * index *, * searchd * et * source *. Chacun de ces blocs est décrit ci-dessous et, à la fin de cette étape, l’intégralité de + sphinx.conf +
est incluse pour que vous puissiez la coller dans le fichier.
Le bloc * source * contient le type de source, le nom d’utilisateur et le mot de passe du serveur MySQL. La première colonne de la requête SQL doit être un identifiant unique. La requête SQL s’exécute sur chaque index et sauvegarde les données dans un fichier d’index Sphinx. Vous trouverez ci-dessous une description de chaque champ et du bloc source lui-même.
-
+ sql_host +
: Nom d’hôte pour l’hôte MySQL. Dans notre exemple, il s’agit de * localhost *. Cela peut être un domaine ou une adresse IP. -
+ sql_user +
: Nom d’utilisateur pour la connexion à MySQL. Dans notre exemple, il s’agit de * racine *. -
+ sql_pass +
: Mot de passe pour l’utilisateur MySQL. Dans notre exemple, il s’agit du mot de passe * root * de l’utilisateur MySQL -
+ sql_db +
: Nom de la base de données qui stocke les données. Dans notre exemple, il s’agit de * test *. -
+ sql_query +
: C’est la requête qui vide les données pour les indexer.
source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = password
sql_db = test
sql_port = 3306 # optional, default is 3306
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
sql_attr_uint = group_id
sql_attr_timestamp = date_added
sql_query_info = SELECT * FROM documents WHERE id=$id
}
Le composant * index * contient la source et le chemin d’accès pour stocker les données.
-
+ source +
: Nom du bloc source. Dans notre exemple, il s’agit de * src1 *. -
+ chemin +
: Ce chemin pour sauvegarder l’index. -
+ charset_type +
: C’est le charset de l’index. Vous définissez également ceci sur * utf-8 *.
index test1
{
source = src1
path = /var/lib/sphinxsearch/data/test1
docinfo = extern
charset_type = sbcs
}
Le composant * searchd * contient le port et d’autres variables pour exécuter le démon Sphinx.
-
+ listen +
: C’est le port sur lequel le démon sphinx sera exécuté. Dans notre exemple, c’est 9312. -
+ query_log +
: Ce chemin pour enregistrer le journal de la requête. -
+ pid_file +
: Il s’agit du chemin d’accès au fichier PID du démon Sphinx. -
+ max_matches +
: Le nombre maximal de correspondances à renvoyer par terme de recherche. -
+ seamless_rotate +
: Empêche les blocages searchd lors de la rotation d’index contenant de grandes quantités de données à mettre en cache. -
+ preopen_indexes +
: Indique s’il faut forcer l’ouverture préalable de tous les index au démarrage. -
+ unlink_old +
: Indique s’il faut dissocier les anciennes copies d’index en cas de rotation réussie.
searchd
{
listen = 9312 # Port to listen on
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinxsearch/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/data
}
La configuration complète à copier et coller est ci-dessous. La seule variable que vous devez modifier ci-dessous est le + sql_pass +
dans le bloc source, qui est mis en évidence.
source src1
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = # change this to your root users MySQL password
sql_db = test
sql_port = 3306
sql_query = \
SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \
FROM documents
sql_attr_uint = group_id
sql_attr_timestamp = date_added
sql_query_info = SELECT * FROM documents WHERE id=$id
}
index test1
{
source = src1
path = /var/lib/sphinxsearch/data/test1
docinfo = extern
charset_type = sbcs
}
searchd
{
listen = 9312
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinxsearch/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
binlog_path = /var/lib/sphinxsearch/data
}
Étape 5 - Ajout de données à l’index
Dans cette section, nous allons ajouter des données à l’index Sphinx.
Ajoutez des données à indexer en utilisant la configuration créée précédemment.
sudo indexer --all
Vous devriez obtenir quelque chose qui ressemble à ce qui suit.
Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'test1'...
WARNING: collect_hits: mem_limit=0 kb too low, increasing to 25600 kb
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.005 sec, 33788 bytes/sec, 700.28 docs/sec
total 3 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 9 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
Pour maintenir l’index à jour, créons un travail cron.
Ouvrez la crontab.
crontab -e
On vous demandera peut-être quel éditeur de texte vous souhaitez utiliser. Choisissez ce que vous préférez; Dans ce tutoriel, nous avons utilisé + nano +
.
Copiez et collez le texte suivant à la fin du fichier, puis enregistrez-le et fermez-le.
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
La tâche ci-dessus s’exécutera toutes les heures et ajoutera de nouvelles données à l’index à l’aide du fichier de configuration par défaut.
Étape 6 - Démarrer Sphinx
Dans cette section, nous allons démarrer le démon Sphinx.
Par défaut, le démon Sphinx est désactivé. Pour activer Sphinx, ouvrez d’abord + / etc / default / sphinxsearch +
.
sudo nano /etc/default/sphinxsearch
Recherchez la ligne + START = no +
et définissez-la sur yes.
START=yes
Ensuite, enregistrez et fermez le fichier.
Enfin, démarrez le démon Sphinx.
sudo service sphinxsearch start
Étape 7 - Test de recherche
Dans cette section, nous allons tester notre recherche. Entrez la commande suivante.
search this is my test document number
Vous devriez obtenir quelque chose qui ressemble à ce qui suit.
Sphinx 2.0.4-id64-release (r3135)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinxsearch/sphinx.conf'...
index 'test1': query 'this is my test document number ': returned 2 matches of 2 total in 0.002 sec
displaying matches:
1. document=1, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=1
group_id=1
group_id2=5
date_added=2014-12-16 09:49:04
title=test one
content=this is my test document number one. also checking search within phrases.
2. document=2, weight=7431, group_id=1, date_added=Tue Dec 16 09:49:04 2014
id=2
group_id=1
group_id2=6
date_added=2014-12-16 09:49:04
title=test two
content=this is my test document number two
words:
1. 'this': 4 documents, 4 hits
2. 'is': 4 documents, 4 hits
3. 'my': 2 documents, 2 hits
4. 'test': 3 documents, 5 hits
5. 'document': 2 documents, 2 hits
6. 'number': 3 documents, 3 hits
Ci-dessus, vous pouvez trouver 2 résultats à partir de notre index de tests pour notre terme de recherche. Vous pouvez également trouver des correspondances par mot.
Conclusion
Dans ce tutoriel, nous vous avons montré une recherche très simple en utilisant la ligne de commande. Vous pouvez également trouver des implémentations officielles SphinxAPI natives pour PHP, Perl, Python, Ruby et Java here.
Si vous utilisez PHP, here sont des exemples pratiques pour tester Sphinx.
En utilisant Sphinx, vous pouvez facilement ajouter une recherche personnalisée à votre site. Pour plus d’informations sur l’utilisation de Sphinx, visitez le site http://sphinxsearch.com [site Web du projet].