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

今天,我們將深入探討一個複雜但至關重要的主題:在多租戶應用程式中利用 Meilisearch。在本指南結束時,進階和中級開發人員將清楚了解如何配置 Meilisearch 以有效地管理多租戶。
多租戶:它是什麼?
在多租戶架構中,軟體應用程式的單一執行個體會為多個客戶或「租戶」提供服務。每個租戶的資料都是隔離的,並且其他租戶無法看到。
多租戶使用案例
多租戶的典型使用案例是在軟體即服務 (SaaS) 應用程式中,多個公司共用同一個資料庫。每個公司都成為租戶,其資料不應被其他人存取。在這種情況下,您可能已在主要資料儲存中實作此規範。
使用 Meilisearch 的多租戶:最終方法
雖然可以使用 Meilisearch 為每個公司建立一個索引,但不建議這樣做,因為效能問題。Meilisearch 會依序處理任務,並且無法最大化索引的吞吐量,因為無法並行處理不同索引上的任務。
相反,最好的方法是將所有租戶放入同一個索引中,並使用Meilisearch 強大的租戶令牌,以限制僅對特定使用者範圍的存取權。為此,儲存的文件不僅應具有ID,還應具有公司識別碼,以按公司區隔使用者。
準備 Meilisearch 以進行多租戶
讓我們以類似 Slack 應用程式的範例來說明。在此應用程式中,使用者屬於一家公司,且每個使用者都可以在不同的討論串中建立文字訊息。我們的目標是建立一個包含所有訊息的索引,但僅允許特定公司的人員存取其公司的訊息。隨後,我們可能想要執行套用在使用者和討論串上篩選器的搜尋。
首先,我們需要轉換我們的資料,使其最適合 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.id
和company.id
,而且company.name
並非必要,因為使用者已知道他們的公司。searchableAttributes
:這些是搜尋功能將使用的屬性。在我們的案例中,只有data
(或訊息文字) 是可搜尋的。filterableAttributes
:這些是您可以篩選的屬性。我們已包含用於租戶令牌的company.id
、用於即時篩選的user.name
和thread
。sortableAttributes
:這些是您可以排序的屬性。我們只包含created_at
,因為您可能想要依時間順序排序訊息。
建立租戶令牌
設定好 Meilisearch 組態後,下一個步驟是為每個公司建立新的租戶令牌。如果沒有特別的安全性考量,您可以省略到期日以簡化您的導入程序。
了解如何使用 SDK 產生租戶令牌。
租戶令牌的關鍵部分是 searchRules
。在我們的範例中,您將新增以下規則
{ "messages": { "filter": "company.id = 838" } }
透過產生的令牌,您的搜尋將根據 company.id
限制存取權,因此使用者只會看到他們公司內的訊息。
將此令牌儲存在您的主要資料儲存 (Postgres、MySQL 等) 中。此機制類似於 Stripe 等工具中使用的機制。
每次使用者登入您的應用程式時,將此金鑰載入到本機儲存空間中,並將其用於搜尋,確保每個使用者只能存取與他們公司相關的資料。
結論
一旦您了解如何正確組織資料並設定搜尋屬性,使用 Meilisearch 建立多租戶應用程式 就相當簡單了。透過遵循本指南,您可以確保您的應用程式提供安全、有效率且使用者友善的搜尋體驗。如果您有任何問題,可以透過 Discord 加入我們。
使用 Meilisearch Cloud 提高生產力並簡化開發流程。無需再部署伺服器或手動更新。免費試用 14 天,無需信用卡。
如需更多 Meilisearch 資訊,請訂閱我們的電子報。您可以查看我們的路線圖並參與我們的產品討論,以深入了解我們的產品。
程式設計愉快!