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