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

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

多租戶指南

了解如何在您的多租戶應用程式中使用 Meilisearch

Carolina Ferreira
Carolina FerreiraMeilisearch 開發者倡導者@CarolainFG
Multi-tenancy guide

今天,我們將深入探討一個複雜但至關重要的主題:在多租戶應用程式中利用 Meilisearch。在本指南結束時,進階和中級開發人員將清楚了解如何配置 Meilisearch 以有效地管理多租戶。

多租戶:它是什麼?

在多租戶架構中,軟體應用程式的單一執行個體會為多個客戶或「租戶」提供服務。每個租戶的資料都是隔離的,並且其他租戶無法看到。

多租戶使用案例

多租戶的典型使用案例是在軟體即服務 (SaaS) 應用程式中,多個公司共用同一個資料庫。每個公司都成為租戶,其資料不應被其他人存取。在這種情況下,您可能已在主要資料儲存中實作此規範。

使用 Meilisearch 的多租戶:最終方法

雖然可以使用 Meilisearch 為每個公司建立一個索引,但不建議這樣做,因為效能問題。Meilisearch 會依序處理任務,並且無法最大化索引的吞吐量,因為無法並行處理不同索引上的任務。

相反,最好的方法是將所有租戶放入同一個索引中,並使用Meilisearch 強大的租戶令牌,以限制僅對特定使用者範圍的存取權。為此,儲存的文件不僅應具有ID,還應具有公司識別碼,以按公司區隔使用者。

透過我們的示範體驗實際運作的多租戶
- SaaS 示範
- 租戶令牌示範

準備 Meilisearch 以進行多租戶

讓我們以類似 Slack 應用程式的範例來說明。在此應用程式中,使用者屬於一家公司,且每個使用者都可以在不同的討論串中建立文字訊息。我們的目標是建立一個包含所有訊息的索引,但僅允許特定公司的人員存取其公司的訊息。隨後,我們可能想要執行套用在使用者和討論串上篩選器的搜尋。

Database diagram showing the relationships between companies, users, and messages.

首先,我們需要轉換我們的資料,使其最適合 Meilisearch 索引。以下是一個範例文件可能的外觀

{
	"id": 48735873,
	"user":{
		"id": 5749,
		"name": "bob"
	},
	"company": {
		"id": 838,
		"name": "Acme Inc"
	},
	"thread": "meilisearch-is-awesome",
	"data": "Meilisearch is so easy to use! 🔥",
	"created_at": 1543230000
}

了解如何在文件中更新您的設定

接下來,您需要建立訊息索引並新增以下設定

{
  "displayedAttributes": [
    "id",
		"user.name",
		"thread",
		"data",
		"created_at"
  ],
  "searchableAttributes": [
    "data"
  ],
  "filterableAttributes": [
		"user.name",
		"company.id",
		"thread"
	],
  "sortableAttributes": [
		"created_at"
	]
}

以下是每個設定的作用

  • displayedAttributes:這些是會出現在您的應用程式搜尋結果中的屬性。為了安全起見,我們省略了 user.idcompany.id,而且 company.name 並非必要,因為使用者已知道他們的公司。
  • searchableAttributes:這些是搜尋功能將使用的屬性。在我們的案例中,只有 data (或訊息文字) 是可搜尋的。
  • filterableAttributes:這些是您可以篩選的屬性。我們已包含用於租戶令牌的 company.id、用於即時篩選的 user.namethread
  • sortableAttributes:這些是您可以排序的屬性。我們只包含 created_at,因為您可能想要依時間順序排序訊息。

建立租戶令牌

設定好 Meilisearch 組態後,下一個步驟是為每個公司建立新的租戶令牌。如果沒有特別的安全性考量,您可以省略到期日以簡化您的導入程序。

租戶令牌的關鍵部分是 searchRules。在我們的範例中,您將新增以下規則

{
  "messages": {
    "filter": "company.id = 838"
  }
}

透過產生的令牌,您的搜尋將根據 company.id 限制存取權,因此使用者只會看到他們公司內的訊息。

將此令牌儲存在您的主要資料儲存 (Postgres、MySQL 等) 中。此機制類似於 Stripe 等工具中使用的機制。

每次使用者登入您的應用程式時,將此金鑰載入到本機儲存空間中,並將其用於搜尋,確保每個使用者只能存取與他們公司相關的資料。

結論

一旦您了解如何正確組織資料並設定搜尋屬性,使用 Meilisearch 建立多租戶應用程式 就相當簡單了。透過遵循本指南,您可以確保您的應用程式提供安全、有效率且使用者友善的搜尋體驗。如果您有任何問題,可以透過 Discord 加入我們。

使用 Meilisearch Cloud 提高生產力並簡化開發流程。無需再部署伺服器或手動更新。免費試用 14 天,無需信用卡。

如需更多 Meilisearch 資訊,請訂閱我們的電子報。您可以查看我們的路線圖並參與我們的產品討論,以深入了解我們的產品。

程式設計愉快!

How to add AI-powered search to a React app

如何在 React 應用程式中新增 AI 驅動的搜尋

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

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

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

了解如何使用 Next.js 和 Blazity Commerce Starter 建置 Shopify 店面。

Laurent Cazanove
Laurent Cazanove2024 年 8 月 19 日
Meilisearch 1.8

Meilisearch 1.8

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

Carolina Ferreira
Carolina Ferreira2024 年 5 月 7 日