Інтеграція Meilisearch для швидкого пошуку на сайті
Відзначимо: коли кількість записів у каталозі перевалює за 50 000, стандартний LIKE '%query%' в PostgreSQL починає гальмувати. Час запиту зростає, навантаження на базу збільшується. Ми не раз стикалися з цією проблемою на проєктах. Рішення — Rust пошуковик Meilisearch: двигун повнотекстового пошуку на Rust, який відповідає швидше ніж 50 мс навіть на мільйонах записів. Meilisearch у 15 разів швидший за стандартний SQL-пошук. Він підтримує пошук з помилками, нечіткий пошук, фасетну фільтрацію та автодоповнення з коробки. Налаштування Meilisearch включає конфігурацію індексу, правил ранжування та синхронізацію з базою даних (індексація даних). Ми пропонуємо Meilisearch інтеграцію під ключ: від налаштування інфраструктури до UI-компонента. За нашими розрахунками, інтеграція окупається за 2–3 місяці, а економія витрат на інфраструктуру становить до 400 000 ₴ на рік. Вартість базової інтеграції — від 25 000 грн. Маємо 5+ років досвіду в інтеграції пошукових систем, реалізовано понад 30 проєктів. Отримайте консультацію з інтеграції вашого проєкту.
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 робочих днів для типового каталогу. Вартість базової інтеграції — від 25 000 грн. Напишіть нам, і ми оцінимо ваш проєкт індивідуально.
Моніторинг
Метрики моніторингу
Meilisearch віддає метрики через `/metrics` у Prometheus-форматі (при включеній опції). Ключові показники: розмір індексу, час індексації завдань, кількість запитів на секунду. Статус завдань індексації доступний через `/tasks`.Ми гарантуємо, що пошук працюватиме швидко навіть при одночасних запитах тисяч користувачів. Досвід показує, що правильно налаштована індексація знижує навантаження на базу на 60–80%. Замовте інтеграцію Meilisearch для вашого сайту та отримайте швидкий і релевантний пошук. Зв'яжіться з нами для консультації та оцінки проєкту.







