Prerequisiti
Installazione di MySQL.
Installazione di Sphinx
Assicuriamoci di aggiornare l'indice dei pacchetti. Aprire il terminale e dare questo comando:
sudo apt-get update
Quindi installiamo Sphinx utilizzando il repository ufficiale di Ubuntu:
sudo apt-get install sphinxsearch
Creiamo un database per configurare e testare Sphinx. Effettuiamo il login in MySQL sempre da terminale:
mysql -u root -p
Creiamo il database:
CREATE DATABASE test;
Importiamo il file SQL di esempio:
SOURCE /etc/sphinxsearch/example.sql;
Usciamo da MySQL:
quit
Configurare Sphinx
Creiamo il file sphinx.conf in /etc/sphinxsearch:
sudo nano /etc/sphinxsearch/sphinx.conf
Questo è il blocco principale, cambiare solo la password in sql_pass inserendo quella del vostro database.
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
}
Il blocco index contiene la directory per salvare l'index.
index test1
{
source = src1
path = /var/lib/sphinxsearch/data/test1
docinfo = extern
}
Il blocco searchd contiene altre configurazioni come la porta e le variabili per avviare Sphinx come deamon.
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
}
Questo è il file di configurazione completo. Potete semplicemente copiare questo codice e incollare tutto nel vostro file. Dovete solamente cambiare la password con quella del vostro database.
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
}
Preparare gli Index
Aggiungiamo i dati all'index usando la configurazione appena creata.
sudo indexer --all
Dovreste ottenere un risultato simile a questo:
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).
In produzione è necessario avere sempre gli index aggiornati, quindi creiamo un cronjob.
Apriamo il crontab, da terminale:
crontab -e
Aggiungere questo comando che verrà eseguito in automatico ogni ora:
@hourly /usr/bin/indexer --rotate --config /etc/sphinxsearch/sphinx.conf --all
Salvare e chiudere il file.
Avviamo Sphinx
Di default il demone di Sphinx è impostato su OFF quindi cambiamo questo parametro:
sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch
Usiamo systemctl per riavviare il demone di Sphinx:
sudo systemctl restart sphinxsearch.service
Per verificare se il demone di Sphinx è avviato correttamente dare questo comando:
sudo systemctl status sphinxsearch.service
Testiamo Sphinx
Da terminale effettuiamo il login in MySQL accedendo al database di Sphinx con questo comando:
mysql -h0 -P9306
Cerchiamo una frase:
SELECT * FROM test1 WHERE MATCH('test document'); SHOW META;
Dovreste ottenere un risultato simile a questo:
+------+----------+------------+
| 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)
Nei risultati ottenuti potete vedere come Sphinx ha trovato 2 risultati nell'index test1 utilizzando la nostra frase di prova.
Cerchiamo delle keywords:
CALL KEYWORDS ('test one three', 'test1', 1);
Dovreste ottenere un risultato simile a questo:
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)
Questi sono altri risultati ottenuti usando delle keywords.
Adesso è possibile uscire da MySQL:
quit