MeiliSearch — простое автономное решение для полнотекстового поиска, которое легко интегрировать в Laravel-приложение, с помощью драйвера для Laravel Scout!
Laravel Scout существует уже давно. Отличный инструмент, легко позволяющий реализовать полнотекстовый поиск для Eloquent-моделей. При запуске Scout имеет возможность использовать драйвера Algolia — сервиса, который обеспечивает полнотекстовый поиск через собственные сервера. И возможность создания своих драйверов. Как и многие другие SaaS-предложения, Algolia избавляет разработчиков от лишней работы и позволяет быстро развернуть приложение.
Однако бывают случаи, когда мне просто нужен полнотекстовый поиск. Такой же простой как Algolia, но которую я бы смог хостить у себя, без всяких сложностей какие есть например у Elasticsearch. Такой инструмент я нашёл в MeiliSearch.
Хочу показать вам, как легко можно настроить локальный сервер поиска и подключить его к Laravel. В этом примере я буду использовать свежеустановленный Laravel 8 и настрою модель App\Models\User
для поиска через MeiliSearch/Scout.
Установка Laravel Scout
composer require laravel/scout
Публикация конфига Scout
php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
Добавление трейта Laravel\Scout\Searchable
в модель
namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Scout\Searchable; class User extends Authenticatable { use HasFactory, Notifiable, Searchable;
Установка драйвера MeiliSearch Laravel Scout
composer require meilisearch/meilisearch-laravel-scout
Публикация конфига MeiliSearch
php artisan vendor:publish --provider="Meilisearch\Scout\MeilisearchServiceProvider" --tag="config"
Обновление .env
Если у вас нет ключа, то оставьте MEILISEARCH_KEY пустым
SCOUT_DRIVER=meilisearch MEILISEARCH_HOST=http://127.0.0.1:7700 MEILISEARCH_KEY=
Запуск MeiliSearch
Следуйте инструкциям в документации MeiliSearch.
Создание поискового индекса
❯ php artisan scout:index users Index "users" created.
Импортирование документов для заполнения индекса
❯ php artisan scout:import "App\Models\User" Imported [App\Models\User] models up to ID: 10 All [App\Models\User] records have been imported.
Поиск по модели
❯ php artisan tinker >>> App\Models\User::search('Rach')->get(); => Illuminate\Database\Eloquent\Collection {#4219 all: [ App\Models\User {#4230 id: 5, name: "Rachelle Anderson", email: "jerod37@example.org", email_verified_at: "2020-10-20 15:13:09", created_at: "2020-10-20 15:13:09", updated_at: "2020-10-20 15:13:09", }, ], }
Дополнение
Документация MeiliSearch охватывает существенно больше вариантов использования, чем описано в этой статье. Если хотите использовать инструмент на полную мощь, то рекомендую ознакомиться с ней.
Автор: Jose Soto
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.