2.3.5. Sphinx
Заказ больше недоступен
Дополнительная услуга Sphinx больше недоступна для заказа и её поддержка в рамках наших сервисов прекращена. В качестве актуальной альтернативы рекомендуем использовать Manticore Search.Оплата
На виртуальном хостинге услуга оплачивается посуточно с баланса, на бизнес-хостинге входит в стоимость тарифа. При заказе для виртуального хостинга на балансе должна быть сумма для оплаты минимум 1 месяца использования услуги.Sphinx (SQL Phrase Index) — система полнотекстового поиска с поддержкой морфологии различных языков. Позволяет быстро и гибко искать информацию в базе данных по произвольному тексту.
Настройка Sphinx
Примечания:
- Автоматический и ручной конфигурационные файлы не синхронизированы между собой. Если настроить Sphinx через панель управления и переключится на ручное редактирование, то в конфигурационном файле не будет изменений, сделанных через панель управления, и наоборот.
- Чтобы узнать версию Sphinx, подключитесь к хостингу по SSH и выполните команду
/usr/local/sphinx/bin/searchd -v. - С подробным описанием работы Sphinx и списком всех его параметров можно ознакомиться в официальной документации (англ.).
Протоколы доступа к поисковому демону Sphinx (searchd):
- «Сокет MySQL-Sphinx» — доступ через SphinxQL, разновидность SQL, похожую на MySQL.
- «Сокет Native-Sphinx» — доступ через SphinxAPI, собственный API Sphinx.
Для использования Sphinx нужно:
- Настроить Sphinx — через панель управления или ручным редактированием.
Панель управления
- В блоке «Основные данные» отключите «Ручное редактирование»:

- Добавьте источник данных:
- В блоке «Базы данных» нажмите «Подключить базу данных»:

- Укажите название и данные для подключения к базе данных MySQL (можно выбрать существующую базу данных и поля заполнятся автоматически) и нажмите «Сохранить»:

- Добавьте индекс:
- В блоке «Индексы» нажмите «Создать индекс»:

- Укажите название индекса, выберите базу данных, укажите SQL-запрос для получения данных для индексирования (например,
SELECT id, title, content FROM table— столбцыid,titleиcontentиз таблицыtable), и нажмите «Сохранить»:Наличие в SQL-запросе столбцаidявляется обязательным условием Sphinx. Если в качестве ID используется столбец с другим названием, используйте псевдоним:SELECT custom_id as id.
- Настройте индекс:

- Поля в индексе и атрибуты — список полей и типов данных для каждого из них (минимум одно поле должно иметь тип Fulltext):

- Частота индексации — расписание, по которому должна выполняться индексация. Настраивается аналогично времени запуска в cron. По умолчанию выполняется ежедневно каждые 15 минут.
- Морфология и параметры индексации:
- Морфология — название библиотеки (например,
stem_ru), которая будет использоваться для поиска слова с разными словоформами — например, по запросу «собака» будут возвращаться результаты с вариантами «собаки», «собакой», «собаками» и т. д. - Параметры индексации — удаление HTML (
html_strip), хранение оригинальных слов (index_exact_words), автоматическое расширение запросов (expand_keywords), минимальный размер слова (min_word_len), инфиксы (min_infix_len), префиксы (min_prefix_len), путь к словарю специализированных терминов (wordforms), таблица кодировки и игнорирование символов.
- В блоке «Основные данные» нажмите «Применить конфигурацию» для обновления конфигурации на сервере. Примечание Кнопкой «sphinx.conf» можно просмотреть содержимое сгенерированного конфигурационного файла.
Ручное редактирование
- В блоке «Основные данные» включите «Ручное редактирование»:

- В блоке «Конфигурация Sphinx» укажите источники данных, параметры индексации и сохраните изменения:

- Источник данных (секция
source) — конфигурация источника данных (откуда Sphinx должен брать данные) и его название (в примере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) — конфигурация индекса (как именно Sphinx должен работать с данными) и его название (в примере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 будет перезапущен.
- При наличии в конфигурации секций
indexв блоке «Индексы» для каждого индекса будет создана cron-задача на его обновление раз в 15 минут и будет запущено создание индексов (может занять некоторое время):
В блоке «Индексы»:
- Данные о размере кешируются на 10 минут.
- После нажатии кнопки удаления из конфигурации будет удалена секция
indexданного индекса.
Внимание!
Сохранение изменений в конфигурации Sphinx не запускает обновление созданных ранее индексов, они обновятся автоматически по установленному расписанию cron. Для принудительного обновления всех индексов подключитесь к хостинг-аккаунту по SSH и выполните команду:/usr/local/sphinx/bin/indexer --config ~/.system/sphinx/sphinx.conf --rotate --all
Настройка сайта
Внимание!
Перед использованием плагинов для работы со Sphinx внимательно ознакомьтесь с их требованиями и совместимостью. Большинство плагинов давно не поддерживаются и работают с версией Sphinx 2.2 или ниже, на хостинге используется версия 3.Настройка сайта для работы со Sphinx находится в компетенции разработчика сайта или привлечённых сторонних специалистов.
Задача сводится к следующим этапам:
- Изучить содержимое базы данных сайта и определить, по каким именно данным требуется быстрый поиск.
- Сконфигурировать Sphinx с нужными параметрами: указать, из какой базы данных нужно брать данные, какие таблицы и столбцы нужно индексировать, задать правила индексации.
- Добавить на сайт код, который вместо стандартного поиска в базе данных будет искать данные в созданном индексе Sphinx. Код может быть написан разработчиком либо самостоятельно, либо за основу могут быть взяты готовые плагины или модули, упомянутые на официальном сайте.
Подключение сайта к Sphinx выполняется через сокет. Путь к сокету можно найти на странице управления Sphinx. Порт следует указывать в зависимости от конфигурации подключаемого плагина, в целом портом можно пренебречь, указав его как 0 или 9312.
Просмотр лога
Просматривать лог можно несколькими способами:
- Панель управления: в разделе «Sphinx» в блоке «Основные данные» нажмите «Лог» — появится окно, в котором в реальном времени будут выводиться последние записи в логе.
- Файл-менеджер: в разделе «Sphinx» в блоке «Основные данные» в строке «Лог» нажмите 🔍 — лог откроется во встроенном редакторе файл-менеджера.
- Консоль: подключитесь к хостингу по SSH и выполните нужную команду:
- Просмотр полного лога:
cat ~/.system/sphinx/searchd.log - Мониторинг лога в реальном времени:
tail -f ~/.system/sphinx/searchd.logДля завершения используйте сочетание Ctrl+C.
searchd.log и query.log (лог ошибок подключения и лог запросов) можно безболезненно удалять, если информация из них вам не нужна.
И вот наконец то дошли руки пощупать "новый" Sphinx и это какой то пиздец.
Через раз вылазят красные фреймы с "запрешено" - а почему, иди нахуй вот почему.
Захотел сделать индексирование - права на ошибку нет, если ты ошибся то ты ошибся и индекс надо создавать заново.
Сделайте ХОТЯ БЫ пояснения что не так если вылазят екшепшены. В идеальном мире вобше писать под инпутом что можно а что нельзя вводить в это поле.
И поля которые уже нельзя редактировать после создания - не нужно обманывать пользователя оставляя доступной кнопку редактирования.