Laravel Scout 指南
在本指南中,您將了解如何設定 Laravel Scout,以便在您的 Laravel 10 應用程式中使用 Meilisearch。
先決條件
開始之前,請確保您的電腦上已安裝以下項目
- PHP
- Composer
您還需要一個 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 索引設定
- 它使
organization_id
欄位可篩選 - 它使
name
和company_name
欄位可排序
變更索引設定後,您將需要同步您的 Scout 索引設定。
同步您的索引設定
要同步您的索引設定,請執行以下命令
php artisan scout:sync-index-settings
使用範例
您建立了一個範例應用程式,示範如何在 Laravel Scout 中使用 Meilisearch。它展示了一個在客戶關係管理 (CRM) 應用程式中的應用程式範圍搜尋。
這個示範應用程式使用了以下功能
當然,程式碼已在 Github 上開源。 🎉