Простая настройка и запуск Sphinx на debian для полнотекстового поиска на сайте

Стандартный полнотекстовый поиск MySQL не решает многих задач и не настолько производителен, как поиск Sphinx. Привожу простой пример установки и настройки Sphinx в debian для организации поиска на сайтах. Установим версию 2.2.11 из стандартного репозитория: apt install sphinxsearch

Далее заходим /etc/sphinxsearch/sphinx.conf и настраиваем конфиг подобным образом:

Для первичного запуска хватит, потом желательно добавить стоп слова и прочие настройки на основе лога запросов и их скорости. В общем в этот файл придется заглянуть ещё раз 100500(простая настройка и запуск Sphinx да) Перезапустим службу и проиндексируем все добавленные конфиги:

Индексация/переиндексация БД таблицы объемом 5 млн записей в 2.7 гига занимает чуть больше 2 минут. Скорость отменная. Чтобы поиск заработал необходимо запустить демон с соответствующим конфигом:

Теперь мы можем искать по индексу из консоли или из под php. Для поиска из консоли mysql -h0 -P9806 и собственно запрос:

Из под php соединяемся так: $db_index = new mysqli('localhost:9806');  бд выбирать не нужно, сразу можно делать запросы, как в обычной базе. Только запросы делаются не к таблице, а к её индексу. Сервис слушает порт 9806 на локальной lo петле и протоколу SphinxQL. В примерах по данному протоколу обычно указывается порт 9306, но у меня он занят. Также в образцах конфигов данный порт зачем-то открыт для всех желающих извне… Хм… это 100% точно есть хорошо. Например, если в конфиге настроено обновление индексов в реальном времени, то это получается, можно с сервера дяди Васи «обновить» чего-нибудь кому-нибудь тому, кто не вдумчиво скопипастил конфиг? А  таких товарищей 99%, прям бери в гугл бей «9306:mysql41», находи где они постят свои проблемы со sphinx на форумах, определяй их серваки и в путь. Поэтому в конфиге обязательно 127.0.0.1:9806:mysql41 Слушает только локалка!

Для переиндексации необходимо выполнить:

Можно поставить данные задачи на крон, обновляя индексацию всех ресурсов и перезапуская демон. Одной командой:

Но лучше сделать по другому. Демон нужно запускать при каждом перезапуске системы, поэтому создадим соответствующий unit файл, который будет это делать. И теперь наша крон задача на переиндексацию будет выглядеть так: