今天,我们将深入探讨一个复杂但必不可少的主题:在多租户应用程序中使用 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 配置就绪后,下一步是为每个公司创建一个新的租户令牌。如果您没有特定的安全问题,您可以省略过期日期以简化您的入职流程。
租户令牌的关键部分是 searchRules
。在我们的示例中,您将添加以下规则
{
"messages": {
"filter": "company.id = 838"
}
}
使用生成的令牌,您的搜索将根据 company.id
限制访问权限,因此用户只能看到他们公司内的消息。
将此令牌存储在您的主数据存储中(Postgres、MySQL 等)。这种机制类似于 Stripe 等工具中使用的机制。
每次用户登录您的应用程序时,将此密钥加载到本地存储中,并将其用于搜索,确保每个用户只能访问与他们公司相关的数据。
结论
使用 Meilisearch 创建多租户应用程序 非常简单,只要您了解如何构建数据并正确配置搜索属性即可。通过遵循本指南,您可以确保您的应用程序提供安全、高效且用户友好的搜索体验。如果您有任何问题,可以加入我们的 Discord。
使用 Meilisearch Cloud 提高生产力,简化开发流程。无需再进行服务器部署或手动更新。免费试用 14 天,无需信用卡。
要了解更多关于 Meilisearch 的信息,请订阅我们的 时事通讯。您可以通过查看我们的 路线图 并参与我们的 产品讨论 来了解更多关于我们产品的信息。
祝您编码愉快!