- Опубликовано: 6 мар 2025
- 88
Как обеспечить полную актуальность индекса Meilisearch на Laravel сайте
При использовании 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 сайте. Используйте очереди, регулярно выполняйте переиндексацию и избегайте прямых изменений данных в БД без обновления индекса, и ваш поиск всегда будет работать быстро и точно.
Была статья полезной: