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 и это какой то пиздец.
Через раз вылазят красные фреймы с "запрешено" - а почему, иди нахуй вот почему.
Захотел сделать индексирование - права на ошибку нет, если ты ошибся то ты ошибся и индекс надо создавать заново.
Сделайте ХОТЯ БЫ пояснения что не так если вылазят екшепшены. В идеальном мире вобше писать под инпутом что можно а что нельзя вводить в это поле.
И поля которые уже нельзя редактировать после создания - не нужно обманывать пользователя оставляя доступной кнопку редактирования.