使用 Laravel 進行全文搜尋的完整指南
使用 Laravel 10 建置全文搜尋功能所需的一切知識。

在本指南中,我們將了解如何在 Laravel 10 中使用搜尋功能。首先,我們將介紹全文搜尋的優點。然後,我們將引導您在 Laravel 應用程式中設定全文搜尋。
為何使用全文搜尋?
在傳統的 SQL 或 NoSQL 資料庫中,查詢會找到與指定條件完全相符的結果。相反地,全文搜尋查詢可以將部分或全部的文字查詢與資料庫的內容相符。因此,本質上,即使在部分匹配的情況下,全文搜尋也能提供結果。
在建置面向使用者的搜尋介面時,全文搜尋對使用者來說是一種賦能。對錯字、前綴搜尋和同義詞的容忍度,可幫助他們更快地獲得結果。當使用者不知道他們正在尋找什麼時,它會改善可探索性。
查看 Meilisearch 搜尋引擎的全部全文搜尋功能。
如何在 Laravel 10 中使用搜尋功能?
安裝 Laravel Scout
Laravel 透過 Laravel Scout 提供開箱即用的全文搜尋功能。
若要啟用它,請導覽至您的 Laravel 應用程式目錄,並透過 Composer 套件管理員安裝 Scout
composer require laravel/scout
安裝 Scout 後,您應該發佈 Scout 設定檔。您可以使用以下 artisan 命令來完成此操作
php artisan vendor:publish --provider="LaravelScoutScoutServiceProvider"
此命令應在您的應用程式目錄中建立一個新的設定檔:config/scout.php
。
設定 Laravel Scout 驅動程式
讓我們設定 Laravel Scout 以使用 Meilisearch 驅動程式。Meilisearch 是一個以 Rust 建置的開放原始碼搜尋引擎。這將使您獲得最佳的全文搜尋效能。實際上,資料庫驅動程式具有SQL 資料庫固有的限制
首先,透過 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
。
這來自 Docker 橋接網路驅動程式 行為。
對於生產用例,我們建議透過 Meilisearch Cloud 使用受管理的 Meilisearch。在 Meilisearch Cloud 上,您可以在專案設定中找到您的主機 URL。
使 Eloquent 模型可搜尋
在安裝並設定 Scout 後,只需將 Laravel\Scout\Searchable
特性新增到您的 Eloquent 模型,即可使其可搜尋。此特性將使用 Laravel 的模型觀察器,使模型中的資料與 Meilisearch 保持同步。
以下是模型範例
<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use LaravelScoutSearchable; class Contact extends Model { use Searchable; }
您可以使用 toSearchableArray
方法來設定要在 Meilisearch 中儲存的欄位。這尤其可以將模型及其關係的資料儲存在同一個文件中。
以下範例示範如何在 Meilisearch 中儲存模型的關係資料
<?php namespace AppModels; use AppModelsCompany; use LaravelScoutSearchable; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentRelationsBelongsTo; 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 允許您在搜尋結果上執行進階篩選和排序。透過 Meilisearch 索引設定,選擇哪些屬性可篩選和可排序。
透過 config/scout.php
檔案設定您的 Meilisearch 索引設定
<?php use AppModelsContact; return [ // additional configuration... 'meilisearch' => [ 'host' => env('MEILISEARCH_HOST', 'https://127.0.0.1:7700'), 'key' => env('MEILISEARCH_KEY'), 'index-settings' => [ Contact::class => [ 'filterableAttributes' => ['organization_id'], 'sortableAttributes' => ['name', 'company_name'] ], ], ],
上述範例會更新聯絡人模型的 Meilisearch 索引設定
- 它使
organization_id
欄位可篩選 - 它使
name
和company_name
欄位可排序
執行以下 Artisan 命令來更新您的 Meilisearch 索引設定
php artisan scout:sync-index-settings
Laravel 全文搜尋範例
我們建立了一個示範應用程式,讓您感受在 Laravel 應用程式中的全文搜尋是什麼樣子。此示範展示了 CRM (客戶關係管理) 應用程式中的應用程式範圍搜尋。
此示範應用程式使用以下搜尋功能
該程式碼已在 Github 上開放原始碼。🎉
👉 查看儲存庫:https://github.com/meilisearch/saas-demo
我們希望本指南能幫助您了解全文搜尋的重要性以及如何在 Laravel 中實作它。如需更多資訊,請閱讀 Laravel Scout 和 Meilisearch 文件。
Meilisearch 是一個開放原始碼搜尋引擎,具有直觀的開發人員體驗,可建置面向使用者的搜尋功能。您可以自行託管它,或使用 Meilisearch Cloud 獲得優質體驗。
如需更多 Meilisearch 相關資訊,您可以加入 Discord 上的社群,或訂閱電子報。您可以透過查看藍圖並參與產品討論來了解更多關於產品的資訊。