Comment installer et configurer Sphinx sur Ubuntu 14.04

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:

É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

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