Как установить и настроить Sphinx в Ubuntu 16.04 - 17.04

12 set 2022 3 min di lettura
Как установить и настроить Sphinx в Ubuntu 16.04 - 17.04
Indice dei contenuti

Предпосылки

Установка MySQL.

инсталляция сфинкс

Давайте удостоверимся, что мы обновляем индекс пакета. Откройте терминал и дайте следующую команду:

sudo apt-get update

Затем мы устанавливаем Sphinx, используя официальный репозиторий Ubuntu:

sudo apt-get install sphinxsearch

Давайте создадим базу данных для настройки и тестирования Sphinx. Мы всегда заходим в MySQL из терминала:

mysql -u root -p

Давайте создадим базу данных:

CREATE DATABASE test;

Давайте импортируем пример файла SQL:

SOURCE /etc/sphinxsearch/example.sql;

Выходим из MySQL:

quit

Настройка Сфинкса

Создадим файл sphinx.conf в /etc/sphinxsearch:

sudo nano /etc/sphinxsearch/sphinx.conf

Это основной блок, просто измените пароль в sql_pass, введя пароль вашей базы данных.


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
 }

Блок индекса содержит каталог для сохранения индекса.


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

Блок searchd содержит другие настройки, такие как порт и переменные для запуска Sphinx в качестве демона.


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
 }

Это полный файл конфигурации. Вы можете просто скопировать этот код и вставить все в свой файл. Вам просто нужно изменить пароль на пароль вашей базы данных.


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
 }

Подготовьте указатель

Давайте добавим данные в индекс, используя только что созданную конфигурацию.

sudo indexer --all

Вы должны получить что-то вроде этого:


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

В продакшне необходимо всегда иметь обновленные индексы, поэтому давайте создадим cronjob. Давайте откроем crontab из терминала:

crontab -e

Добавьте эту команду, которая будет запускаться автоматически каждый час:


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

Сохраните и закройте файл.

Запускаем Сфинкса

По умолчанию демон Sphinx отключен, поэтому давайте изменим этот параметр:

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

Мы используем systemctl для перезапуска демона Sphinx:

sudo systemctl restart sphinxsearch.service

Чтобы проверить, правильно ли запущен демон Sphinx, введите следующую команду:

sudo systemctl status sphinxsearch.service

Тестируем Сфинкса

Из терминала мы входим в MySQL, обращаясь к базе данных Sphinx с помощью этой команды:

mysql -h0 -P9306

Давайте найдем фразу:

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

Вы должны получить что-то вроде этого:


+------+----------+------------+
 | 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)

В полученных результатах видно, как Sphinx нашел 2 результата в индексе test1, используя наше тестовое предложение.

Ищем ключевые слова:

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

Вы должны получить что-то вроде этого:


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)

Это другие результаты, полученные с использованием ключевых слов.

Теперь вы можете выйти из MySQL:

quit

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.