Laravel Scout 指南

    在本指南中,您将了解如何在 Laravel 10 应用程序中使用 Laravel Scout 设置 Meilisearch。

    先决条件

    在开始之前,请确保您的机器上已安装以下软件

    您还需要一个 Laravel 应用程序。如果您没有,可以通过运行以下命令创建一个新的应用程序

    composer create-project laravel/laravel my-application
    

    安装 Laravel Scout

    Laravel 通过 Laravel Scout 提供开箱即用的全文搜索功能。

    要启用它,请导航到您的 Laravel 应用程序目录并通过 Composer 包管理器安装 Scout

    composer require laravel/scout
    

    安装 Scout 后,您需要发布 Scout 配置文件。您可以通过运行以下 artisan 命令来完成此操作

    php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
    

    此命令应在您的应用程序目录中创建一个新的配置文件:config/scout.php

    配置 Laravel Scout 驱动程序

    现在您需要配置 Laravel Scout 以使用 Meilisearch 驱动程序。首先,通过 Composer 安装将 Scout 与 Meilisearch 一起使用所需的依赖项

    composer require meilisearch/meilisearch-php http-interop/http-factory-guzzle
    

    然后,更新 .env 文件中的环境变量

    SCOUT_DRIVER=meilisearch
    # Use the host below if you're running Meilisearch via Laravel Sail
    MEILISEARCH_HOST=http://meilisearch:7700
    MEILISEARCH_KEY=masterKey
    

    本地开发

    Laravel 的官方 Docker 开发环境 Laravel Sail 带有开箱即用的 Meilisearch 服务。请注意,当通过 Sail 运行 Meilisearch 时,Meilisearch 的主机是 http://meilisearch:7700(而不是例如 https://127.0.0.1:7700)。

    注意

    有关更多详细信息,请查看 Docker 桥接网络驱动程序 文档。

    在生产环境中运行

    对于生产用例,我们建议通过 Meilisearch Cloud 使用托管的 Meilisearch。在 Meilisearch Cloud 上,您可以在项目设置中找到您的主机 URL。

    如果您更喜欢自行托管,请阅读我们的在生产环境中运行 Meilisearch 指南。

    使 Eloquent 模型可搜索

    安装并配置 Scout 后,将 Laravel\Scout\Searchable trait 添加到您的 Eloquent 模型,使其可搜索。此 trait 将使用 Laravel 的模型观察器使模型中的数据与 Meilisearch 保持同步。

    这是一个示例模型

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use Laravel\Scout\Searchable;
    
    class Contact extends Model
    {
    	use Searchable;
    }
    

    要配置哪些字段存储在 Meilisearch 中,请使用 toSearchableArray 方法。您可以使用此技术将模型及其关系的数据存储在同一文档中。

    下面的示例演示如何在 Meilisearch 中存储模型的关系数据

    <?php
    
    namespace App\Models;
    
    use App\Models\Company;
    use Laravel\Scout\Searchable;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\Relations\BelongsTo;
    
    class Contact extends Model
    {
        use Searchable;
    
        public function company(): BelongsTo
        {
            return $this->belongsTo(Company::class);
        }
    
        public function toSearchableArray(): array
        {
    	      // All model attributes are made searchable
            $array = $this->toArray();
    
    		    // Then we add some additional fields
            $array['organization_id'] = $this->company->organization->id;
            $array['company_name'] = $this->company->name;
            $array['company_url'] = $this->company->url;
    
            return $array;
        }
    }
    

    配置可筛选和可排序的属性

    通过 Meilisearch 索引设置配置哪些属性是可筛选的可排序的

    在 Laravel 中,您可以通过 config/scout.php 文件配置索引设置

    <?php
    
    use App\Models\Contact;
    
    return [
    	  // Other Scout configuration...
    
        'meilisearch' => [
            'host' => env('MEILISEARCH_HOST', 'https://edge.meilisearch.com'),
            'key' => env('MEILISEARCH_KEY'),
            'index-settings' => [
                Contact::class => [
                    'filterableAttributes' => ['organization_id'],
                    'sortableAttributes' => ['name', 'company_name']
                ],
            ],
        ],
    ];
    

    上面的示例更新了 Contact 模型的 Meilisearch 索引设置

    更改索引设置后,您需要同步您的 Scout 索引设置。

    同步您的索引设置

    要同步您的索引设置,请运行以下命令

    php artisan scout:sync-index-settings
    

    示例用法

    您构建了一个示例应用程序,演示如何将 Meilisearch 与 Laravel Scout 一起使用。它展示了 CRM(客户关系管理)应用程序中的应用程序范围搜索。

    Laravel Scout example application

    此演示应用程序使用以下功能

    当然,该代码在 Github 上开源。🎉