Laravel Scout предоставляет простой и мощный API для полнотекстового поиска в вашем Laravel-приложении. Он интегрируется с популярными поисковыми движками, такими как Algolia и MeiliSearch, а также предлагает драйвер для локального поиска. В этом руководстве мы рассмотрим, как настроить и использовать Laravel Scout для реализации полнотекстового поиска.

1. Установка Laravel Scout

Для начала убедитесь, что у вас установлен Laravel и Composer. Создайте новый проект Laravel, если у вас его еще нет:

composer create-project --prefer-dist laravel/laravel scout-example

Перейдите в директорию проекта:

cd scout-example

Установите Laravel Scout через Composer:

composer require laravel/scout

2. Настройка модели

Чтобы использовать Laravel Scout, ваша модель должна использовать трейт Searchable. Например, если у вас есть модель Post, добавьте трейт Searchable:

<?php

namespace App\Models;

use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use Searchable;
}

3. Настройка индексации

Laravel Scout автоматически индексирует ваши модели при сохранении, обновлении или удалении. Однако, для полной индексации ваших моделей, вы можете использовать команду scout:import:

php artisan scout:import "App\Models\Post"

4. Поиск моделей

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

$posts = App\Models\Post::search('query')->get();

5. Настройка поискового движка

Laravel Scout поддерживает несколько поисковых движков. Вы можете выбрать движок, установив соответствующий пакет через Composer и настроив его в файле .env.

Algolia

Установите пакет Algolia:

composer require algolia/algoliasearch-client-php

Настройте Algolia в .env:

SCOUT_DRIVER=algolia
ALGOLIA_APP_ID=your_app_id
ALGOLIA_SECRET=your_secret

MeiliSearch

Установите пакет MeiliSearch:

composer require meilisearch/meilisearch-php

Настройте MeiliSearch в .env:

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

6. Настройка поискового индекса

Вы можете настроить поисковый индекс для вашей модели, определив метод toSearchableArray в модели:

public function toSearchableArray()
{
    $array = $this->toArray();

    // Customize the data array...

    return $array;
}

7. Поиск с пагинацией

Laravel Scout поддерживает пагинацию результатов поиска:

$posts = App\Models\Post::search('query')->paginate(10);

8. Поиск с фильтрацией

Вы можете фильтровать результаты поиска, используя метод where:

$posts = App\Models\Post::search('query')
            ->where('category', 'news')
            ->get();

Заключение

Laravel Scout предоставляет простой и мощный способ реализации полнотекстового поиска в вашем Laravel-приложении. Он интегрируется с популярными поисковыми движками и предлагает гибкий API для выполнения поисковых запросов. Изучение и использование Laravel Scout может значительно улучшить пользовательский опыт вашего приложения, предоставляя быстрый и точный поиск.