弹性搜索碎片/路由



我有一个多租户系统,我正在尝试设计Elasticsearch以支持多租户。我已经在网上搜索了,但是我发现的所有帖子都没有在实践中指定如何做。基本想法是在每个索引上都有1个碎片,并使用自定义路由来查询客户专用的碎片。这很清楚。现在,我该如何实施?如何在每个索引中创建多个碎片,以指定"钥匙值"以在将来查询该特定碎片?代码示例将有所帮助。

非常感谢。

我不认为这是实现多租赁的正确方法,而不是在碎片级别上。

您想实现什么目标?我认为您希望不同的用户(或更好的角色)可以访问索引的不同部分。在这种情况下,您应该查看文档级安全权限。

如何在实践中实现这一目标?假设您有一个名为multitenants-index的索引,并且您有两个租户:(i)第一个租户只能读/编写具有字段 "tenant": 1的文档,(ii)第二租户只能读/写那些文档字段"tenant": 2。然后,您可以创建以下两个角色:

POST /_xpack/security/role/first_tenant
{
  "indices": [
    {
      "names": [ "multitenants-index" ],
      "privileges": [ "read", "write" ],
      "query": "{"match": {"tenant": 1}}"
    }
  ]
}
POST /_xpack/security/role/second_tenant
{
  "indices": [
    {
      "names": [ "multitenants-index" ],
      "privileges": [ "read", "write" ],
      "query": "{"match": {"tenant": 2}}"
    }
  ]
}

最新更新