MAATRIX / Блог / Meilisearch для интернет-магазина: опечатки, фильтры и обновление каталога

Meilisearch для интернет-магазина: опечатки, фильтры и обновление каталога

MAATRIX · 17 октября 2026 · 8 мин чтения

Покупатель набрал «акумулятор», получил пустую страницу и решил, что товара нет. В базе лежат десятки аккумуляторов, но поисковая строка ждала идеальной орфографии. Для магазина это выглядит как маленькая техническая особенность, для покупателя — как закрытая дверь.

Meilisearch помогает организовать быстрый поиск с настройками релевантности, допуском опечаток и фильтрами. При этом поисковый индекс не заменяет каталог магазина. Он хранит подготовленное представление товаров, которое нужно регулярно обновлять и проверять.

Разберём небольшой проект: поиск по названию и артикулу, фильтр по категории и наличию, корректное удаление снятого товара. Задача — получить понятную выдачу и научиться проверять её на реальных запросах, прежде чем включать новый поиск для всех посетителей.

VPS для поиска по вашему каталогу

Запустите Meilisearch на VPS MAATRIX и проверьте выдачу на своих товарах. Для небольшого пилота рассмотрите 2 vCPU и 4 GB памяти с запасом диска под индекс.

ВЫБРАТЬ VPS

Что именно отправлять в индекс

Для первого варианта достаточно полей id, sku, title, description, category, price_minor, in_stock и url. Идентификатор должен совпадать с неизменяемым ID товара в основной системе. Артикул полезен для точного поиска, но его бизнес-правила могут отличаться: например, один артикул иногда используется у нескольких вариантов.

Не выгружайте внутреннюю закупочную цену, контакты поставщика и служебные заметки. Даже если интерфейс их не показывает, они не должны оказаться в публичном поисковом сервисе. Состав индексируемого документа лучше задавать явным списком.

Цены храните числом в минимальных денежных единицах. Категории и признаки наличия должны иметь устойчивый формат: строка «есть», число 1 и логическое true не обязаны вести себя одинаково в фильтрах. Перед загрузкой нормализуйте данные.

Для вариативных товаров заранее решите, что является результатом поиска: карточка товара или отдельный вариант. Если индексировать каждый размер футболки отдельной строкой, выдача может заполниться одинаковыми фотографиями. Это вопрос модели каталога, который поисковый движок самостоятельно не решит.

Сервер для поиска выбирают по индексу

Для пробного индекса небольшого каталога можно начать с MAATRIX Uab Start: 2 vCPU и 4 GB памяти. Если одновременно идут массовая индексация и активный поиск, рассмотрите Heka Standard с 4 vCPU и 8 GB. Нужный размер определяется не только числом товаров: важны объём текста, настройки фильтров и частота обновления.

Оставляйте место для перестроения индекса и резервных выгрузок. Файл исходного JSON и рабочий индекс имеют разный размер. При полном обновлении может потребоваться дополнительное пространство, поэтому планировать диск ровно под текущий объём опасно.

Используйте поддерживаемую Linux-систему, фиксированную версию Meilisearch и постоянное хранилище данных. Начальную установку можно сверить с руководством для Ubuntu. Доступ администратора ограничьте сетью и отдельным ключом.

На рабочем сервере включите режим и настройки безопасности согласно документации ключей Meilisearch. Главный ключ нельзя помещать в браузер или публичный репозиторий. Для загрузки каталога и для поиска нужны разные разрешения.

Настраиваем индекс перед массовой загрузкой

Создайте индекс products с первичным ключом id. Сначала загрузите десяток учебных записей. В настройках определите поля поиска и их порядок: например, название, артикул, затем описание. Проверьте на своих данных, как этот порядок влияет на выдачу.

Поля для фильтрации нужно объявить заранее. Пример тела настройки:

{
  "searchableAttributes": ["title", "sku", "description"],
  "filterableAttributes": ["category", "in_stock", "price_minor"],
  "sortableAttributes": ["price_minor"],
  "displayedAttributes": ["id", "sku", "title", "category", "price_minor", "in_stock", "url"]
}

Передайте этот объект через официальный SDK или API обновления настроек выбранного индекса. Изменение настроек может запускать переиндексацию; дождитесь успешного завершения задачи. Ответ о принятии запроса ещё не означает, что новые правила уже действуют.

Устройство фильтров описано в руководстве Meilisearch. Не включайте фильтрацию по каждой колонке только потому, что колонка существует: это увеличивает работу индексатора и усложняет интерфейс.

После проверки маленького набора выгружайте товары порциями. Сохраняйте идентификаторы задач индексации и проверяйте их итоговый статус. Если одна партия завершилась ошибкой, отметка «выгрузка выполнена» в вашей системе не должна скрывать этот факт.

Первый запрос и ограничения доступа

Сервер приложения может обращаться к Meilisearch сам и возвращать браузеру только нужные результаты. Для простого публичного каталога допустим отдельный ограниченный поисковый ключ в браузере, но он не должен давать возможность изменять индекс или читать другие коллекции.

Учебное тело поискового запроса выглядит так:

{
  "q": "акумулятор",
  "filter": "category = 'batteries' AND in_stock = true",
  "limit": 12,
  "attributesToRetrieve": ["id", "title", "price_minor", "url"]
}

Не переносите этот подход напрямую на закрытые цены партнёров или персональные каталоги. Если доступ зависит от пользователя, ограничения нужно обеспечивать серверным механизмом или предусмотренными tenant tokens, а не свободно изменяемым фильтром браузера.

Цена и наличие в поиске могут немного отставать от основной системы. При открытии карточки и оформлении заказа приложение должно перепроверять актуальные сведения. Поисковый результат помогает найти товар, но не является окончательным подтверждением возможности купить его по старой цене.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Опечатки полезны не для каждого поля

Для обычных названий допуск опечаток помогает. Для артикула AB-120 замена одного символа может означать совершенно другой товар. Поэтому отдельно проверьте настройки точности для технических идентификаторов и коротких кодов.

Составьте набор из нескольких десятков запросов: точное название, разговорное слово, опечатка, артикул, категория и заведомо отсутствующий товар. Для каждого заранее запишите, какие результаты должны быть наверху. Не меняйте ожидания задним числом ради красивой демонстрации.

Синонимы добавляйте по смыслу ассортимента. «Ноутбук» и «лэптоп» могут быть полезной парой; «масло» и «смазка» в техническом магазине способны смешать разные категории. Проверяйте несколько соседних запросов после каждого нового правила.

Поиск с пустым запросом тоже требует решения. Он может показывать популярные категории или обычный список каталога, но это должно быть осознанное поведение. Если посетитель видит случайные товары, он воспринимает это как рекомендацию, даже когда разработчик так не задумывал.

Каталог меняется, индекс должен успевать

Для небольшого проекта можно начать с периодической полной выгрузки. Однако даже здесь нужно обрабатывать удаление: товар, исчезнувший из источника, не исчезает автоматически из прежнего индекса после загрузки остальных записей.

Более точный вариант — события об изменении товара и отдельный процесс синхронизации. Событие содержит ID и версию, обработчик получает актуальные данные и обновляет документ. Повторная обработка того же изменения должна быть безопасной.

При большом полном обновлении готовьте новый индекс отдельно, проверяйте его и переключайте согласно поддерживаемому механизму Meilisearch. Сохраните прежний вариант до окончания контроля. Не очищайте рабочую выдачу за час до загрузки новых данных, надеясь, что посетители займутся чем-нибудь ещё.

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

Фильтры должны объяснять, что осталось в выдаче

Покупатель выбрал категорию и наличие, затем ввёл новое слово. Проверьте, сохраняются ли прежние фильтры и заметно ли это на экране. Скрытое ограничение часто становится причиной пустой выдачи, которую ошибочно принимают за недостаток поискового движка.

Показывайте активные условия рядом с результатами и позволяйте сбросить их одним действием. Для диапазона цены заранее договоритесь, в каких единицах он передаётся серверу. Если интерфейс показывает рубли, а индекс хранит копейки, преобразование нужно проверить на границах диапазона.

Фасеты помогают показать доступные значения категорий и брендов, но их настройки тоже требуют испытания. Посчитайте результаты на небольшом наборе вручную и сравните с интерфейсом. Особенно внимательно смотрите товары, которые принадлежат нескольким категориям.

Если фильтр по наличию включён по умолчанию, объясните это человеку. Иногда покупатель ищет инструкцию или замену для товара, которого сейчас нет на складе. Возможность увидеть такой результат с честной пометкой полезнее категоричного сообщения об отсутствии товара в каталоге.

При добавлении нового фильтра повторяйте тестовые запросы с разными сочетаниями условий. Ошибка обычно скрывается не в отдельной кнопке, а в совместной работе категории, цены, сортировки и поисковой строки.

Как оценить, стало ли лучше

До включения нового поиска сохраните обезличенный набор типичных запросов. После запуска сравнивайте долю пустых ответов, переходы в карточки и время ответа. Не записывайте в аналитику лишние персональные данные: люди иногда вставляют в поиск номер телефона или целое письмо.

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

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

Удачный поиск не заставляет покупателя угадывать, как товар назван в бухгалтерии. Он понимает привычный запрос, предлагает подходящие варианты и честно показывает отсутствие результата. VPS даёт место для этой работы; качество выдачи рождается из аккуратных данных и регулярной проверки живых вопросов покупателей.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →