Зміст

    Миттєвий пошук по сайту

    16.10.2025

    Коли на сайті потрібно реалізувати пошук за назвами товарів, стандартний LIKEпошук в MySQL швидко стає вузьким місцем — він працює повільно і нерідко пропускає потрібні результати.

    Щоб вирішити цю проблему, в компанії «Хостинг Україна» ми використовуємо Manticore Search — швидку і легку систему для повнотекстового пошуку. Важливо розуміти, що Manticore Search не замінює MySQL, а доповнює її, прискорюючи пошук за текстовими даними і покращуючи релевантність результатів.

    🚀 Швидкість

    Manticore Search здатний обробляти десятки мільйонів документів за частки секунди. Ми протестували систему на 31 млн документів (близько 488 ГБ даних з реєстру судових рішень 2021 року).–2025 рр.). Розмір індексу склав 187 ГБ, а пошук по ньому виконується миттєво — там, де звичайний SQL-запит зайняв би хвилини.

    Завдяки цьому можна реалізувати підказки в реальному часі — результати з'являються прямо під час набору тексту користувачем.

    🎯 Релевантність

    Manticore повертає документи, відсортовані за релевантністю. Це означає, що найточніші збіги будуть першими. Розробнику не потрібно писати складні формули для сортування — все працює з коробки.

    Чи використовувати Manticore для маленьких баз?

    Так! Навіть якщо у вас всього кілька тисяч записів, використання Manticore виправдано, якщо пошук виконується часто і важлива швидкість. Індекс займає небагато місця і оновлюється швидко.

    Manticore Search — це розвиток популярної раніше системи Sphinx. Головна перевага Manticore — можливість змінювати індекс без повної переіндексації даних. Це особливо корисно, коли обсяг даних великий і важливо мінімізувати час оновлення індексів.

    У панелі керування Manticore є зручний інтерфейс для створення таблиць. Для кожного поля можна вказати параметри зберігання:

    • Indexed — за полем будується повнотекстовий індекс.
    • Stored — дані зберігаються в таблиці.
    Створення RealTime таблиці в Manticore Search
    Створення RealTime таблиці в Manticore Search

    Приклад налаштування

    Якщо дані зберігаються в MySQL, а Manticore використовується тільки для пошуку, достатньо відзначити поле text як Indexed, а Stored — прибрати.

    Такий підхід дає дві переваги:

    1. Економія місця — зберігається тільки індекс.
    2. Швидша індексація — менше даних записується на диск.

    У нашому тесті ми не зберігали 488 ГБ даних, а тільки індекс (187 ГБ). При пошуку Manticore повертає ідентифікатори документів, а MySQL за первинним ключем швидко знаходить самі документи.

    Якщо даних небагато — можна зберігати і текст, щоб віддавати результати без додаткових запитів до MySQL.

    Швидкий старт

    Щоб почати роботу з Manticore Search, виконайте такі кроки:

    1. Створіть таблицю з потрібною структурою через панель управління. Для текстових полів тип text автоматично додає stored і indexed.
    2. Підключіться до Manticore як до MySQL — логін і пароль не потрібні. Доступ обмежується за IP-адресами, які задаються в панелі управління.
    3. Вставте дані за допомогою команди REPLACE, а не INSERT або UPDATE. Це важливо: при UPDATE індекс не оновлюється.
    4. Виконайте пошуковий запит — його можна протестувати як зі скрипта, так і з інтерфейсу панелі.
    SELECT *, WEIGHT()
    FROM table
    WHERE MATCH('test')
    ORDER BY WEIGHT() DESC
    LIMIT 100

    Мінімальна довжина шуканого слова

    За замовчуванням індексуються слова довжиною 3+ символи. За це відповідає параметр min_word_len. Якщо користувачі часто шукають короткі терміни на кшталт MX, NS, UI, зменшіть значення цього параметра до 2.

    Префікси (min_prefix_len)

    Визначає мінімальну частину слова, за якою воно буде знайдено. Наприклад, при min_prefix_len=3 слова «сервер» і «сервіс» будуть знайдені за запитом «сер».

    Інфікси (min_infix_len)

    Дозволяють шукати слова, навіть якщо введення починається не з першої літери. Корисно, наприклад, при пошуку за артикулами товарів. Оптимальні значення — 2 або 3 символи. Використовувати потрібно тільки в разі необхідності, оскільки збільшує розмір індексу і уповільнює індексацію.

    Налаштування параметрів індексації ManticoreSearch
    Налаштування параметрів індексації ManticoreSearch

    Пошук за артикулами товарів

    Якщо артикули містять крапки, тире та інші спецсимволи, потрібно налаштувати індексування:

    • додайте ці символи в blend_chars;
    • приберіть їх з charset_table;
    • активуйте blend_mode, вказавши правила обробки таких символів.

    Приклад: пошук за IP-адресами

    За замовчуванням IP 185.39.224.1 розбивається на окремі слова 185 39 224 1. Щоб індексувалася вся адреса, потрібно додати . в blend_chars і встановити blend_mode=trim_both. Після цього пошук за IP працює коректно.

    Налаштування токенізатора Manticore Search для пошуку за артикулами
    Налаштування токенізатора Manticore Search для пошуку за артикулами

    Зміна налаштувань таблиці

    Зміна налаштувань таблиці вимагає її повного перестворення. Це пов'язано з тим, що зміна алгоритму індексації не оновлює вже існуючі індекси. Після зміни конфігурації необхідно повторно завантажити всі дані.

    Підсумки

    Manticore Search — потужний інструмент для повнотекстового пошуку, який:

    • легко інтегрується з MySQL
    • забезпечує миттєвий пошук за великими і малими обсягами даних
    • гнучко налаштовується під потреби конкретного проекту.

    Якщо ви часто стикаєтеся з повільним пошуком в MySQL — спробуйте Manticore. Почніть з простих налаштувань, а потім поступово ускладнюйте конфігурацію в міру зростання завдань.