Полнотекстовый поиск с помощью MeiliSearch и Laravel Scout

Полнотекстовый поиск

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.