2.3.5. Sphinx

Заказ больше недоступен

Дополнительная услуга Sphinx больше недоступна для заказа и её поддержка в рамках наших сервисов прекращена. В качестве актуальной альтернативы рекомендуем использовать Manticore Search.

Оплата

На виртуальном хостинге услуга оплачивается посуточно с баланса, на бизнес-хостинге входит в стоимость тарифа. При заказе для виртуального хостинга на балансе должна быть сумма для оплаты минимум 1 месяца использования услуги.

Sphinx (SQL Phrase Index) — система полнотекстового поиска с поддержкой морфологии различных языков. Позволяет быстро и гибко искать информацию в базе данных по произвольному тексту.

Примечания:

  • Автоматический и ручной конфигурационные файлы не синхронизированы между собой. Если настроить Sphinx через панель управления и переключится на ручное редактирование, то в конфигурационном файле не будет изменений, сделанных через панель управления, и наоборот.
  • Чтобы узнать версию Sphinx, подключитесь к хостингу по SSH и выполните команду /usr/local/sphinx/bin/searchd -v.
  • С подробным описанием работы Sphinx и списком всех его параметров можно ознакомиться в официальной документации (англ.).

Протоколы доступа к поисковому демону Sphinx (searchd):

  • «Сокет MySQL-Sphinx» — доступ через SphinxQL, разновидность SQL, похожую на MySQL.
  • «Сокет Native-Sphinx» — доступ через SphinxAPI, собственный API Sphinx.

Для использования Sphinx нужно:

  1. В блоке «Основные данные» отключите «Ручное редактирование»:
  2. Добавьте источник данных:
    1. В блоке «Базы данных» нажмите «Подключить базу данных»:
    2. Укажите название и данные для подключения к базе данных MySQL (можно выбрать существующую базу данных и поля заполнятся автоматически) и нажмите «Сохранить»:
  3. Добавьте индекс:
    1. В блоке «Индексы» нажмите «Создать индекс»:
    2. Укажите название индекса, выберите базу данных, укажите SQL-запрос для получения данных для индексирования (например, SELECT id, title, content FROM table — столбцы id, title и content из таблицы table), и нажмите «Сохранить»:
      Наличие в SQL-запросе столбца id является обязательным условием Sphinx. Если в качестве ID используется столбец с другим названием, используйте псевдоним: SELECT custom_id as id.

  4. Настройте индекс:
    • Поля в индексе и атрибуты — список полей и типов данных для каждого из них (минимум одно поле должно иметь тип Fulltext):
    • Частота индексации — расписание, по которому должна выполняться индексация. Настраивается аналогично времени запуска в cron. По умолчанию выполняется ежедневно каждые 15 минут.
    • Морфология и параметры индексации:
      • Морфология — название библиотеки (например, stem_ru), которая будет использоваться для поиска слова с разными словоформами — например, по запросу «собака» будут возвращаться результаты с вариантами «собаки», «собакой», «собаками» и т. д.
      • Параметры индексации — удаление HTML (html_strip), хранение оригинальных слов (index_exact_words), автоматическое расширение запросов (expand_keywords), минимальный размер слова (min_word_len), инфиксы (min_infix_len), префиксы (min_prefix_len), путь к словарю специализированных терминов (wordforms), таблица кодировки и игнорирование символов.
  5. В блоке «Основные данные» нажмите «Применить конфигурацию» для обновления конфигурации на сервере. Примечание Кнопкой «sphinx.conf» можно просмотреть содержимое сгенерированного конфигурационного файла.
  1. В блоке «Основные данные» включите «Ручное редактирование»:
  2. В блоке «Конфигурация 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/
      }
  3. После сохранения конфигурации:
    • 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 находится в компетенции разработчика сайта или привлечённых сторонних специалистов.

Задача сводится к следующим этапам:

  1. Изучить содержимое базы данных сайта и определить, по каким именно данным требуется быстрый поиск.
  2. Сконфигурировать Sphinx с нужными параметрами: указать, из какой базы данных нужно брать данные, какие таблицы и столбцы нужно индексировать, задать правила индексации.
  3. Добавить на сайт код, который вместо стандартного поиска в базе данных будет искать данные в созданном индексе 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 (лог ошибок подключения и лог запросов) можно безболезненно удалять, если информация из них вам не нужна.
Содержание

    (3)

    Комментарии

    weatherius
    Помню версию когда только добавили Sphinx - он был более понятный так как практически ничего своего не добавили, то есть гугл и сотни гайдов спасали ситуацию (нет).

    И вот наконец то дошли руки пощупать "новый" Sphinx и это какой то пиздец.
    Через раз вылазят красные фреймы с "запрешено" - а почему, иди нахуй вот почему.
    Захотел сделать индексирование - права на ошибку нет, если ты ошибся то ты ошибся и индекс надо создавать заново.

    Сделайте ХОТЯ БЫ пояснения что не так если вылазят екшепшены. В идеальном мире вобше писать под инпутом что можно а что нельзя вводить в это поле.
    И поля которые уже нельзя редактировать после создания - не нужно обманывать пользователя оставляя доступной кнопку редактирования.
    rudenko
    Нужен пример граблей, на которые вы наступили. Пришлите или оставьте заполненной форму, а мы посмотрим что не так. Сам sphinx пишет лог, в котором надо искать что ему не понравилось. По мере того, как нам пишут о проблемах мы описываем ошибки и добавляем исключения. Но надо знать что не получается.