Laravel Scout 指南

    在本指南中,您將了解如何設定 Laravel Scout,以便在您的 Laravel 10 應用程式中使用 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 特性新增至您的 Eloquent 模型,使其可搜尋。此特性將使用 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
    

    使用範例

    您建立了一個範例應用程式,示範如何在 Laravel Scout 中使用 Meilisearch。它展示了一個在客戶關係管理 (CRM) 應用程式中的應用程式範圍搜尋。

    Laravel Scout example application

    這個示範應用程式使用了以下功能

    當然,程式碼已在 Github 上開源。 🎉