Разработчикам

Как обеспечить полную актуальность индекса Meilisearch на Laravel сайте

Эдгар Косулин (обновлено 12 августа 2026) 1 мин чтения

Содержание

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

1. Подключение Laravel Scout и Meilisearch

Сначала убедитесь, что ваш проект использует Laravel Scout и Meilisearch. Установите пакеты через Composer:

composer require laravel/scout
composer require meilisearch/meilisearch-php

Затем настройте драйвер в .env:

SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://127.0.0.1:7700
MEILISEARCH_KEY=masterKey

2. Подключение трейта Searchable к моделям

Для каждой модели, которая должна быть проиндексирована в Meilisearch, подключите трейт:

use Laravel\Scout\Searchable;

class Product extends Model
{
    use Searchable;

    // Указываем данные, которые должны попасть в индекс
    public function toSearchableArray()
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'description' => $this->description,
        ];
    }
}

Теперь при каждом создании, обновлении или удалении записи Laravel Scout автоматически будет обновлять индекс.

3. Обработка очередей для быстродействия

Чтобы не замедлять работу сайта, используйте очереди для обновления индекса:

SCOUT_QUEUE=true

Не забудьте запустить обработчик очередей:

php artisan queue:work

Это перенесёт индексацию в фоновый режим и не замедлит отклик вашего сайта.

4. Случаи, когда Scout не срабатывает автоматически

Scout автоматически обновляет индекс только при работе через модель Eloquent (методы save(), create(), delete()). Однако в случае прямых запросов к базе (DB::table()->update() или DB::table()->delete()) Scout не заметит изменений.

В таких случаях необходимо вручную обновлять индекс:

// обновление индекса после массового изменения
Product::where('updated_at', '>=', now()->subMinutes(10))->searchable();

// полная синхронизация
php artisan scout:flush "App\Models\Product"
php artisan scout:import "App\Models\Product"

5. Полная переиндексация по расписанию

Рекомендуется настроить ежедневную (например, ночную) переиндексацию, чтобы гарантировать абсолютную точность данных в индексе:

// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
    $schedule->command('scout:import "App\Models\Product"')->dailyAt('02:00');
}

Это полезно, если есть вероятность некорректных изменений напрямую в БД.

6. Проверка и мониторинг

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

Заключение

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

Laravel PHP

Поделиться: Telegram ВКонтакте

Новые статьи и разборы — в канале Siteko: Telegram MAX

Подписчикам: +30 дней к пробному хостингу, клиентам: +150 ₽ на баланс

Пошаговые инструкции по нашим услугам — в базе знаний

Ещё по теме

Разработчикам 5 мин чтения

Laravel 13: нововведения и улучшения

Laravel 13 вышел 17 марта 2026 года: Тейлор Отвелл представил релиз на Laracon EU. Если вы привыкли к тому, что мажорные версии Laravel приносят болезненные миграции, этот релиз вас приятно удивит: команда сознательно сделала ставку на минимум ломающих изменений и максимум практической пользы. Больш...