Cómo instalar y configurar Sphinx en Debian 10

27 feb 2021 3 min di lettura
Cómo instalar y configurar Sphinx en Debian 10
Indice dei contenuti

Prerrequisitos

Instalación de MySQL.

Instalación Sphinx

Asegurémonos de actualizar el índice del paquete. Abra la terminal y dé este comando:

sudo apt-get update

Luego instalamos Sphinx usando el repositorio oficial de Debian:

sudo apt-get install sphinxsearch

Creemos una base de datos para configurar y probar Sphinx. Iniciamos sesión en MySQL siempre desde la terminal:

mysql -u root -p

Creemos la base de datos:

CREATE DATABASE test;

Importemos el archivo SQL de muestra:

SOURCE /etc/sphinxsearch/example.sql;

Salgamos de MySQL:

quit

Configurar Sphinx

Creemos el archivo sphinx.conf en /etc /sphinxsearch:

sudo nano /etc/sphinxsearch/sphinx.conf

Este es el bloque principal, simplemente cambie la contraseña en sql_pass ingresando la contraseña de su base de datos.

source src1
 {
 type = mysql

 #SQL settings (for 'mysql' and 'pgsql' types)

 sql_host = localhost
 sql_user = root
 sql_pass = VOSTRA_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
 }

El bloque de índice contiene el directorio para guardar el índice.

index test1
 {
 source = src1
 path = /var/lib/sphinxsearch/data/test1
 docinfo = extern
 }

El bloque buscado contiene otras configuraciones como el puerto y las variables para iniciar Sphinx como demonio.

searchd
 {
 listen = 9312:sphinx #SphinxAPI port
 listen = 9306:mysql41 #SphinxQL port
 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
 seamless_rotate = 1
 preopen_indexes = 1
 unlink_old = 1
 binlog_path = /var/lib/sphinxsearch/data
 }

Este es el archivo de configuración completo. Simplemente puede copiar este código y pegar todo en su archivo. Solo tienes que cambiar la contraseña por la de tu base de datos.

source src1
 {
 type = mysql

 sql_host = localhost
 sql_user = root
 sql_pass = PASSWORD_VOSTRO_DATABASE
 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
 }
 index test1
 {
 source = src1
 path = /var/lib/sphinxsearch/data/test1
 docinfo = extern
 }
 searchd
 {
 listen = 9306:mysql41
 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
 seamless_rotate = 1
 preopen_indexes = 1
 unlink_old = 1
 binlog_path = /var/lib/sphinxsearch/data
 }

Prepare el índice

Agreguemos los datos al índice usando la configuración recién creada.

sudo indexer --all

Debería obtener algo como esto:

Sphinx 2.2.9-id64-release (rel22-r5006)
 Copyright (c) 2001-2015, Andrew Aksyonoff
 Copyright (c) 2008-2015, Sphinx Technologies Inc (http://sphinxsearch.com)

 using config file '/etc/sphinxsearch/sphinx.conf'...
 indexing index 'test1'...
 collected 4 docs, 0.0 MB
 sorted 0.0 Mhits, 100.0% done
 total 4 docs, 193 bytes
 total 0.004 sec, 41327 bytes/sec, 856.53 docs/sec
 total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
 total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
 rotating indices: successfully sent SIGHUP to searchd (pid=31773).

En producción siempre es necesario tener índices actualizados, así que creemos un cronjob. Abramos el crontab, desde la terminal:

crontab -e

Agregue este comando que se ejecutará automáticamente cada hora:

@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all

Guarde y cierre el archivo.

Empecemos Sphinx

Por defecto, el demonio Sphinx está desactivado, así que cambiemos este parámetro:

sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch

Usamos systemctl para reiniciar el demonio Sphinx:

sudo systemctl restart sphinxsearch.service

Para comprobar si el demonio Sphinx se ha iniciado correctamente, ejecute este comando:

sudo systemctl status sphinxsearch.service

Probamos Sphinx

Desde la terminal iniciamos sesión en MySQL accediendo a la base de datos Sphinx con este comando:

mysql -h0 -P9306

Busquemos una frase:

SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;

Debería obtener algo como esto:

+------+----------+------------+
 | id | group_id | date_added |
 +------+----------+------------+
 | 1 | 1 | 1497184312 |
 | 2 | 1 | 1497184312 |
 +------+----------+------------+
 2 rows in set (0,01 sec)

 +---------------+----------+
 | Variable_name | Value |
 +---------------+----------+
 | total | 2 |
 | total_found | 2 |
 | time | 0.005 |
 | keyword[0] | test |
 | docs[0] | 3 |
 | hits[0] | 5 |
 | keyword[1] | document |
 | docs[1] | 2 |
 | hits[1] | 2 |
 +---------------+----------+
 9 rows in set (0,00 sec)

En los resultados obtenidos puedes ver cómo Sphinx encontró 2 resultados en el índice test1 usando nuestra frase de prueba.

Buscamos palabras clave:

CALL KEYWORDS ('test one three', 'test1', 1);

Debería obtener algo como esto:

CALL KEYWORDS ('test one three', 'test1', 1);
 +------+-----------+------------+------+------+
 | qpos | tokenized | normalized | docs | hits |
 +------+-----------+------------+------+------+
 | 1 | test | test | 3 | 5 |
 | 2 | one | one | 1 | 2 |
 | 3 | three | three | 0 | 0 |
 +------+-----------+------------+------+------+
 3 rows in set (0,00 sec)

Estos son otros resultados obtenidos mediante palabras clave.

Ahora puede salir de MySQL:

quit

La instalación de Sphinx en Debian 10 ha finalizado.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.