2.3.5. Sphinx

Оплата

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

Sphinx (SQL Phrase Index) — система повнотекстового пошуку з підтримкою морфології різних мов. Дозволяє швидко і гнучко шукати інформацію в базі даних за довільним текстом.

  1. Відкрийте розділ «Sphinx».
  2. У блоці «Основні дані» натисніть «Замовити»:
  3. Зачекайте приблизно 15 хвилин, доки активується послуга.
  4. Налаштуйте Sphinx та сайт .
Перевірити працездатність Sphinx можна за допомогою тестового скрипту.

Примітки:

  • Автоматичний та ручний конфігураційні файли не синхронізовані між собою. Якщо налаштувати 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 уважно ознайомтеся з їхніми вимогами, а також сумісністю. Більшість плагінів давно не підтримуються і працюють з версією 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 (лог помилок підключення та лог запитів) можна безболісно видаляти, якщо інформація з них вам не потрібна.
Зміст

    Коментарі

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

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

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