Интеграция Meilisearch для поиска на сайте
Отметим: когда количество записей в каталоге переваливает за 50 000, стандартный LIKE '%query%' в PostgreSQL начинает тормозить. Время запроса растёт, нагрузка на базу увеличивается. Мы не раз сталкивались с этой проблемой на проектах. Решение — Meilisearch: движок полнотекстового поиска на Rust, который отвечает быстрее 50 мс даже на миллионах записей. Он поддерживает опечатки, нечёткий поиск, фасетную фильтрацию и автодополнение из коробки. Настройка Meilisearch включает конфигурацию индекса, правил ранжирования и синхронизацию с базой данных. Мы предлагаем интеграцию под ключ: от настройки инфраструктуры до UI-компонента. По нашим расчётам, интеграция окупается за 2–3 месяца, а экономия затрат на инфраструктуру составляет до 400 000 ₽ в год. Получите консультацию по интеграции вашего проекта.
Meilisearch official documentation: "Meilisearch is an open-source, RESTful search engine built in Rust. It is designed to be fast, relevant, and easy to use."
Почему стоит выбрать Meilisearch?
Встроенный поиск PostgreSQL перестаёт быть эффективным при 50 000+ записей. Meilisearch строит перевёрнутый индекс отдельно, запросы идут мимо основной БД. Это снижает нагрузку и ускоряет поиск в 10–20 раз. Сравните: таблица на 200 000 товаров ищет через Meilisearch за 30–50 мс, тогда как SQL-запрос с LIKE может занимать 500 мс и больше. Кроме того, Meilisearch из коробки исправляет опечатки и поддерживает фасетную фильтрацию — то, что в Elasticsearch требует дополнительных настроек. Средний ROI по проектам — 300%. Мы имеем опыт интеграции в проектах разного масштаба: от блогов с 10 000 статей до B2B-каталогов с 500 000 товаров. Гарантируем стабильную работу при пиковых нагрузках. Свяжитесь с нами для оценки вашего проекта.
Архитектура интеграции
Browser → Backend API → Meilisearch HTTP API ↓ PostgreSQL (источник данных) Индексатор (Queued Job / Cron) Meilisearch не заменяет основную БД. Данные живут в PostgreSQL, в Meilisearch попадает только то, что нужно для поиска. Синхронизация — через очереди при изменении записей или периодическим ребилдом индекса.
Как настроить синхронизацию?
- Установите Meilisearch через Docker:
docker run -p 7700:7700 getmeili/meilisearch - Создайте индекс с нужными полями и настройте правила ранжирования.
- Подключите Laravel Scout с официальным драйвером Meilisearch. Пример модели:
use Laravel\Scout\Searchable; class Product extends Model { use Searchable; public function toSearchableArray(): array { return [ 'id' => $this->id, 'name' => $this->name, 'description' => strip_tags($this->description), 'brand' => $this->brand->name, 'category_id' => $this->category_id, 'price' => $this->price, 'in_stock' => $this->stock > 0, ]; } } - Запустите первичную индексацию:
php artisan scout:import "App\Models\Product". - Для поиска с фильтрами используйте:
$results = Product::search($query) ->where('in_stock', true) ->where('category_id', $categoryId) ->orderBy('price') ->paginate(20); Фасетная фильтрация
Meilisearch возвращает агрегации по фасетам за один запрос. Например, для фильтрации по категории, бренду и наличию можно отправить запрос с параметрами filter и facets. Ответ содержит распределение по каждому фасету, что упрощает построение UI-фильтров.
Прямой поиск из браузера
Прямые запросы из JavaScript к Meilisearch возможны через Search-only API Key — ключ с ограниченными правами (только поиск по конкретным индексам). Это снижает задержку, убирая лишний hop через бэкенд. Пример: client.index('products').search(query, { filter: 'in_stock = true', limit: 10 }).
Кейс из нашей практики: интернет-магазин с 200 000 товаров
К нам обратился клиент с каталогом электроники на 200 000 SKU. Изначально поиск работал через PostgreSQL LIKE, время ответа достигало 800 мс, а нагрузка на базу составляла 70% CPU. Мы настроили Meilisearch: Docker на отдельном сервере, синхронизация через Laravel Scout с очередями. После интеграции время поиска упало до 40 мс, нагрузка на базу снизилась на 75%. Экономия затрат на инфраструктуру составила 400 000 ₽ в год. Клиент отметил улучшение UX и рост конверсии на 12%. Проект занял 8 рабочих дней.
Что входит в работу
| Deliverable | Описание |
|---|---|
| Аудит поиска | Анализ текущей реализации, нагрузочное тестирование |
| Инфраструктура | Docker-образ, настройка SSL, генерация API-ключей |
| Схема индекса | Определение атрибутов, правил ранжирования, фасетов |
| Бэкенд-интеграция | Код синхронизации через очереди, поисковые запросы |
| UI-компонент | Адаптивный поиск с автодополнением и фильтрами |
| Тестирование | Проверка на реальных данных, сценарии edge cases |
| Документация | Описание архитектуры, инструкция по развёртыванию |
| Поддержка после запуска | 2 недели сопровождения |
Сроки ориентировочно
| Этап | Время |
|---|---|
| Настройка инфраструктуры | 1 день |
| Схема индекса | 1 день |
| Интеграция в бэкенд | 2–3 дня |
| UI компонент поиска | 2–3 дня |
| Тестирование и деплой | 1 день |
Итого: 7–9 рабочих дней для типового каталога. Стоимость рассчитывается индивидуально — напишите нам, и мы оценим ваш проект.
Мониторинг
Метрики мониторинга
Meilisearch отдаёт метрики через `/metrics` в Prometheus-формате (при включённой опции). Ключевые показатели: размер индекса, время индексирования задач, количество запросов в секунду. Статус задач индексации доступен через `/tasks`.Мы гарантируем, что поиск будет работать быстро даже при одновременных запросах тысяч пользователей. Опыт показывает, что правильно настроенная индексация снижает нагрузку на базу на 60–80%. Закажите интеграцию Meilisearch для вашего сайта и получите быстрый и релевантный поиск. Свяжитесь с нами для консультации и оценки проекта.







