Sphinx – специализированный поисковый движок с открытым исходным кодом, предназначенный для организации быстрого и эффективного полнотекстового поиска по большим объёмам данных. Изначально Sphinx разрабатывался как дополнение к базам данных, таким как MySQL, позволяя выносить ресурсоёмкие поисковые запросы из СУБД в отдельный сервис. Сейчас Sphinx поддерживает различные источники данных, например, реляционные базы, XML, CSV и другие форматы. Также доступен режим работы с так называемыми RT-индексами, который позволяет добавлять и изменять данные без предварительной индексации.
Sphinx применяется в веб-проектах, системах управления контентом и корпоративных приложениях, где требуется быстрый поиск по текстам, например, по статьям, товарам, логам или сообщениям. К основным преимуществам Sphinx можно отнести высокую скорость поиска даже на больших объёмах данных, снижение нагрузки на основную базу данных, гибкую настройку индексации и поиска, а также возможность работы как отдельного сетевого сервиса.
В статье разберём, как установить Sphinx на виртуальный сервер под управлением Ubuntu или Debian.
Как установить Sphinx на Ubuntu и Debian
Перед установкой Sphinx рекомендуется обновить списки пакетов в системе:
$ sudo apt update
Установка Sphinx в системах на базе Debian и Ubuntu выполняется с помощью стандартного менеджера пакетов APT. Это позволяет проинсталлировать необходимые компоненты из официальных репозиториев вместе с зависимостями. Чтобы это сделать, выполните команду:
$ sudo apt install sphinxsearch
В результате в системе будут установлены основные утилиты Sphinx, включая демон поиска searchd и инструмент индексации indexer.
Затем перейдите в созданный при инсталляции каталог /etc/sphinxsearch/:
$ cd /etc/sphinxsearch/
Здесь при помощи шаблона создайте конфигурационный файл Sphinx:
$ sudo cp sphinx-min.conf.dist sphinx-custom.conf
После чего откройте файл для редактирования:
$ sudo nano sphinx-custom.conf
Нижеприведённый пример конфигурации представляет собой минимальную конфигурацию Sphinx с RT-индексом. Она включает в себя RT (Realtime) индекс с именем testrt и настройки демона поиска searchd.
index testrt
{
type = rt
rt_mem_limit = 128M
path = /var/lib/sphinxsearch/data/testrt
rt_field = title
rt_field = content
rt_attr_uint = gid
}
searchd
{
listen = 127.0.0.1:9312
listen = 127.0.0.1:9306:mysql41
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
read_timeout = 5
max_children = 30
pid_file = /run/sphinxsearch/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinxsearch/data
}
Сохраните отредактированную конфигурацию при закрытии файла sphinx-custom.conf.
Запуск Sphinx в качестве системного сервиса
Чтобы демон searchd работал в фоновом режиме постоянно и автоматически запускался при старте системы, обеспечивая доступность поиска без ручного вмешательства, необходимо настроить работу Sphinx в качестве системного сервиса. Это упрощает управление службой и повышает её надёжность за счёт автоматического перезапуска при сбоях.
Для начала создайте юнит-файл, в котором будут содержаться настройки сервиса:
$ sudo nano /etc/systemd/system/sphinxsearch.service
В файл скопируйте следующее содержимое:
[Unit]
Description=Sphinx Search Engine
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/searchd --config /etc/sphinxsearch/sphinx-custom.conf
ExecStop=/usr/bin/searchd --stop --config /etc/sphinxsearch/sphinx-custom.conf
RuntimeDirectory=sphinxsearch
RuntimeDirectoryMode=0755
Restart=always
[Install]
WantedBy=multi-user.target
Закройте файл с сохранением изменений. После чего выполните команду, которая заставит менеджер служб перечитать конфигурационные файлы:
$ sudo systemctl daemon-reload
Затем установите службу в автозагрузку:
$ sudo systemctl enable sphinxsearch
Для применения всех изменений перезапустите службу:
$ sudo systemctl restart sphinxsearch
Проверить корректность функционирования сервиса можно через вывод его текущего состояния:
$ systemctl status sphinxsearch
В выводе команды не должны присутствовать сообщения о каких-либо ошибках.

Проверка работоспособности Sphinx
Применённая ранее минимальная конфигурация использует RT-индекс и не требует установки сервера базы данных MySQL или MariaDB. Однако для взаимодействия с Sphinx через SphinxQL потребуется клиент MySQL. Поэтому, чтобы убедиться в том, что демон searchd запущен и доступен по SphinxQL-интерфейсу, необходимо установить клиент mysql, например MariaDB, который будет использоваться как инструмент для подключения к Sphinx по протоколу MySQL (SphinxQL):
$ sudo apt install mariadb-client
По окончании установки запустите клиент MySQL, чтобы соединиться с сервером по адресу локального хоста и порту 9306, который слушает демон searchd:
$ mysql -h127.0.0.1 -P9306
Следующая команда позволяет убедиться в том, что индекс testrt загружен:
SHOW TABLES;

Затем при помощи оператора INSERT проверьте, что данные добавляются в RT-индекс:
INSERT INTO testrt (id, title, content, gid) VALUES (1, 'Hello', 'Hello world example', 1), (2, 'Test', 'Sphinx search works', 1);
Оператора SELECT поможет выяснить, что полнотекстовый поиск действительно работает и возвращает результаты:
SELECT * FROM testrt WHERE MATCH('hello');
В нашем примере вывод команды выглядит следующим образом:

Для отключения от командной оболочки клиента MariaDB используйте команду:
EXIT;
