Полное руководство по полнотекстовому поиску в Laravel
Рассмотрим, как использовать функции поиска в Laravel. Начнем с описания преимуществ полнотекстового поиска, а затем пошагово разберем настройку в Laravel-приложении.
🔎 Зачем использовать полнотекстовый поиск?
- Гибкость совпадений: Традиционные базы данных ищут точные совпадения, а полнотекстовый поиск находит данные по частичному совпадению текста.
- Удобство интерфейса: Дает пользователям толерантность к опечаткам, поиск по префиксам и синонимы.
- Улучшение находимости: Помогает людям находить нужную информацию, даже если они не знают точных формулировок.
🛠 Как внедрить поиск в Laravel## 1. Установка Laravel Scout
Laravel поддерживает полнотекстовый поиск «из коробки» с помощью официального пакета Laravel Scout.
Установите Scout через Composer в терминале вашего проекта:
composer require laravel/scout
После установки опубликуйте файл конфигурации config/scout.php с помощью команды Artisan:
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
2. Настройка драйвера Meilisearch
Meilisearch — это быстрый поисковый движок с открытым исходным кодом, написанный на Rust. Использование специализированного драйвера снимает ограничения обычных SQL-баз.
Сначала установите необходимую зависимость для интеграции Scout и Meilisearch:
composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
Затем обновите переменные окружения в вашем файле .env:
SCOUT_DRIVER=meilisearch
MEILISEARCH_HOST=http://127.0.0.1:7700
MEILISEARCH_KEY=masterKey
(Примечание: Если вы используете среду разработки Laravel Sail, хост по умолчанию будет http://meilisearch:7700 из-за особенностей работы сети Docker Bridge).
Для продакшена рекомендуется использовать управляемый сервис Meilisearch Cloud, где URL хоста можно скопировать в настройках проекта.
3. Подключение моделей Eloquent
Чтобы сделать модель доступной для поиска, добавьте в нее трейт Laravel\Scout\Searchable. Наблюдатели моделей (observers) будут автоматически синхронизировать данные с Meilisearch при любых изменениях в БД.
Пример настройки модели:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Contact extends Model
{
use Searchable;
}
Вы можете использовать метод toSearchableArray, чтобы точно указать, какие поля (включая данные из связанных таблиц) должны отправляться в индекс:
public function toSearchableArray(): array
{
return [
'id' => (int) $this->id,
'name' => $this->name,
'email' => $this->email,
'company_name' => $this->company_name,
// Пример добавления связи:
'organization' => $this->organization ? [
'id' => $this->organization->id,
'name' => $this->organization->name,
] : null,
];
}
4. Настройка фильтрации и сортировки
Чтобы использовать продвинутые фильтры и сортировку в Meilisearch, укажите нужные атрибуты в конфигурационном файле config/scout.php в блоке настроек индексов:
'meilisearch' => [
'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
'key' => env('MEILISEARCH_KEY'),
'index_settings' => [
App\Models\Contact::class => [
'filterableAttributes' => ['organization_id'],
'sortableAttributes' => ['name', 'company_name'],
],
],
],
Чтобы применить эти настройки и отправить их в Meilisearch, выполните Artisan-команду:
php artisan scout:sync-index-settings
💡 Пример реализации
Разработчики подготовили демонстрационное SaaS-приложение (CRM-систему) с открытым исходным кодом, чтобы показать полнотекстовый поиск в действии. В демо используются следующие возможности:
- Мульти-поиск (одновременный поиск по разным индексам).
- Мультиарендность (Multi-tenancy / изоляция данных пользователей).
- Различные сценарии фильтрации и сортировки результатов.
Код проекта доступен в репозитории на GitHub: meilisearch/saas-demo.
🗒 Часто задаваемые вопросы (FAQ)
- Что такое Laravel Scout?
Это официальный пакет Laravel для интеграции полнотекстового поиска в модели Eloquent. Он автоматически обновляет поисковые индексы при изменении записей в базе данных. - Почему стоит выбрать Meilisearch в качестве драйвера для Scout?
Стандартный драйвер базы данных имеет ограничения (отсутствие релевантности, не учитывает опечатки). Meilisearch «из коробки» предоставляет высокую скорость, исправление опечаток, поиск по префиксам и синонимам. - Как применить новые параметры фильтрации или сортировки?
Сначала пропишите их в массиве конкретной модели в файле config/scout.php, после чего выполните команду php artisan scout:sync-index-settings для отправки конфигурации в поисковой движок.
