2.2.6. Sphinx
Sphinx (SQL Phrase Index) — система полнотекстового поиска с поддержкой морфологии различных языков. Позволяет быстро и гибко искать информацию в базе данных по произвольному тексту.
Заказ
Важные моменты:
- На тарифах бизнес-хостинга Sphinx доступен по умолчанию. Заказывать его отдельно не нужно.
- Заказывать Sphinx может только владелец хостинг-аккаунта.
- При первом заказе Sphinx доступен бесплатный 7-дневный тестовый период.
- Откройте раздел «Хостинг».
- Если услуга заказывается впервые, пропустите этот шаг, чтобы воспользоваться бесплатным 7-дневным тестовым периодом. В противном случае оплатите автоматически сформированный счёт любым из доступных способов и дождитесь зачисления оплаты.
- Подождите примерно 30 минут, пока активируется услуга.
- Настройте Sphinx.
Настройка
Версия Sphinx
Чтобы узнать версию Sphinx, подключитесь к хостингу по SSH и выполните команду/usr/local/sphinx/bin/searchd -v
.
Для использования Sphinx на сайте нужно настроить как сам Sphinx, так и сайт.
Настройка Sphinx
После заказа Sphinx на странице этой допуслуги появляется две вкладки:

Конфигурация состоит из двух секций:
- Источник данных (
source
) — конфигурация источника данных и его название (в примереdb_source
):- Тип данных (
type
) — тип источника данных (в примереmysql
). - Данные для подключения к базе данных (
sql_host
,sql_port
,sql_user
,sql_pass
,sql_db
) — данные для подключения к базе данных MySQL, откуда будет браться информация для индексирования. - Предварительный запрос (
sql_query_pre
) — запрос, который будет перед основным запросом на получение данных из базы (в примереSET NAMES utf8
— установка кодировки UTF-8). - Основной запрос (
sql_query
) — запрос на получение из базы данных необходимых данных для индексирования (в примереselect id, title, content from table
— столбцыid
,title
иcontent
из таблицыtable
). - Другие директивы — позволяют определять порядок группировки, фильтрации, сортировки (подробную информацию можно найти в официальной документации).
- Параметры индексации (
index
) — конфигурация индекса и его название (в примереtest_index
):- Источник данных для индексирования (
source
) — название источника данных, откуда будет браться информация для индексирования (в примереdb_source
— см. выше). - Путь, по которому будут храниться данные индекса (
path
) — абсолютный путь к файлу с индексами (в примере/home/example/.system/sphinx/test_index
). - Настройки морфологии (
morphology
) — название библиотеки (в примереstem_ru
), которая будет использоваться для поиска слова с разными словоформами — например, по запросу «собака» будут возвращаться результаты с вариантами «собаки», «собакой», «собаками» и т. д. - Сохранение в индексе слов в исходном виде (
index_exact_words
) — при использовании совместно с директивойexpand_keywords
позволяет возвращать по запросу более релевантные результаты (в примере1
— включено). - Минимальная длина слова для индексации (
min_word_len
) — по умолчанию используется1
, но слова такой длины обычно не несут смысловой нагрузки (в примере3
). - Другие директивы — позволяют определять порядок группировки, фильтрации, сортировки (подробную информацию можно найти в официальной документации).
Для включения поддержки лемматизации нужно разместить в хостинг-аккаунте файлы нужных словарей и добавить в конфигурацию секцию:
common { lemmatizer_base = /home/example/path/to/sphinx/dicts/ }
С подробным описанием работы Sphinx и списком всех его параметров можно ознакомиться в официальной документации (англ.).
Ниже можно:
- Выбрать протокол доступа к поисковому демону Sphinx (searchd):
- «MySQL» — доступ через SphinxQL, разновидность SQL, похожую на MySQL.
- «Sphinx» — доступ через SphinxAPI, собственный API Sphinx.
- Включить или отключить ведение лога запросов к Sphinx — query_log.
После нажатия «Сохранить конфигурацию»:
- Sphinx будет перезапущен.
- Если в конфигурации будут обнаружены секции, описывающие дисковые поисковые индексы:
- Для них автоматически будут созданы отдельные cron-задачи на вкладке «Индексы» с периодичностью обновления раз в 15 минут.
- Сразу после сохранения конфигурационного файла будет запущено создание индексов (может занять некоторое время).

Колонки:
- «Индекс» — название индекса. Указывается в конфигурации в секции с параметрами индексации.
- «Частота обновления» — текущее расписание запуска индексирования в стандартном формате cron. По умолчанию индексирование запускается раз в 15 минут.
- «Размер» — размер индекса. Данные кешируются на 10 минут.
- Кнопки:
- Приостановка/запуск — кнопка приостановки/запуска индексирования по расписанию.
- Редактирование — кнопка изменения расписания запуска индексирования.
- Удаление — кнопка удаления индекса. Внимание! После нажатия из конфигурации будет удалена секция с параметрами индексации для данного индекса.
Настройка сайта
Внимание!
Перед использованием плагинов для работы со Sphinx внимательно ознакомьтесь с их требованиями, а также совместимостью. Большинство плагинов давно не поддерживаются и работают с версией Sphinx 2.2 или ниже, на хостинге используется версия 3.Настройка сайта для работы со Sphinx находится в компетенции разработчика сайта или привлечённых сторонних специалистов.
Задача сводится к следующим этапам:
- Изучить содержимое базы данных сайта и определить, по каким именно данным требуется быстрый поиск.
- Сконфигурировать Sphinx с нужными параметрами: указать, из какой базы данных нужно брать данные, какие таблицы и столбцы нужно индексировать, задать правила индексации.
- Добавить на сайт код, который вместо стандартного поиска в базе данных будет искать данные в созданном индексе Sphinx. Код может быть написан разработчиком либо самостоятельно, либо за основу могут быть взяты готовые плагины или модули, упомянутые на официальном сайте.
Подключение сайта к Sphinx выполняется через сокет. Путь к сокету можно найти на странице управления Sphinx. Порт следует указывать в зависимости от конфигурации подключаемого плагина, в целом портом можно пренебречь, указав его как 0 или 9312.
SphinxApi
Для работы со Sphinx можно использовать PHP-библиотеку ShpinxApi. Пример использования библиотеки доступен в том же репозитории в качестве консольного скрипта SphinxTest.
Для тестирования можно взять следующий пример скрипта:
<?php include('sphinxapi.php'); $cl = new SphinxClient(); $cl->SetServer("/home/" . get_current_user() . "/.system/sphinx/sphinx.socket", 9312); $cl->SetMatchMode(SPH_MATCH_ANY); $result = $cl->Query("Example Search Phrase"); // поисковый запрос // обработка результатов запроса if ($result === false) { echo "Query failed: " . $cl->GetLastError() . ".\n"; } else { if ($cl->GetLastWarning()) { echo "WARNING: " . $cl->GetLastWarning() . "\n\n"; } if (!empty($result["matches"])) { foreach ($result["matches"] as $found => $info) { echo $found . "<br />"; } } } exit;
Просмотр лога
- Скопируйте путь к логу из раздела управления Sphinx.
- Подключитесь к хостингу по SSH.
- Выполните одну из команд:
- Просмотр полного лога:
cat ~/.system/sphinx/searchd.log
- Мониторинг лога в реальном времени (для завершения используйте сочетание Ctrl+C):
tail -f ~/.system/sphinx/searchd.log