Содержание
    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. Начните с простых настроек, а затем постепенно усложняйте конфигурацию по мере роста задач.