AI 驅動的混合搜尋功能目前為封閉測試階段。 加入候補名單 搶先體驗!

前往首頁Meilisearch 的標誌
返回文章列表
2023 年 11 月 27 日

使用 Laravel 進行全文搜尋的完整指南

使用 Laravel 10 建置全文搜尋功能所需的一切知識。

Laurent Cazanove
Laurent CazanoveDX 工程師 & 文案@StriftCodes
A complete guide to full-text search with Laravel

在本指南中,我們將了解如何在 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 欄位可篩選
  • 它使 namecompany_name 欄位可排序

執行以下 Artisan 命令來更新您的 Meilisearch 索引設定

php artisan scout:sync-index-settings

Laravel 全文搜尋範例

我們建立了一個示範應用程式,讓您感受在 Laravel 應用程式中的全文搜尋是什麼樣子。此示範展示了 CRM (客戶關係管理) 應用程式中的應用程式範圍搜尋。

CRM demo application build with Laravel

Laravel SaaS 搜尋示範

此示範應用程式使用以下搜尋功能

該程式碼已在 Github 上開放原始碼。🎉

👉 查看儲存庫:https://github.com/meilisearch/saas-demo


我們希望本指南能幫助您了解全文搜尋的重要性以及如何在 Laravel 中實作它。如需更多資訊,請閱讀 Laravel ScoutMeilisearch 文件。

Meilisearch 是一個開放原始碼搜尋引擎,具有直觀的開發人員體驗,可建置面向使用者的搜尋功能。您可以自行託管它,或使用 Meilisearch Cloud 獲得優質體驗。

如需更多 Meilisearch 相關資訊,您可以加入 Discord 上的社群,或訂閱電子報。您可以透過查看藍圖並參與產品討論來了解更多關於產品的資訊。

How to add AI-powered search to a React app

如何將 AI 驅動的搜尋新增至 React 應用程式

使用 Meilisearch 的 AI 驅動搜尋來建置 React 電影搜尋和推薦應用程式。

Carolina Ferreira
Carolina Ferreira2024 年 9 月 24 日
Build your Next.js Shopify storefront with Blazity

使用 Blazity 建置您的 Next.js Shopify 店面

學習使用 Next.js 和 Blazity 商務入門工具來建置 Shopify 店面。

Laurent Cazanove
Laurent Cazanove2024 年 8 月 19 日
Meilisearch 1.8

Meilisearch 1.8

Meilisearch 1.8 帶來負關鍵字搜尋、搜尋穩健性的改進和 AI 搜尋,包括新的嵌入器。

Carolina Ferreira
Carolina Ferreira2024年5月7日