首页 > 解决方案 > 弹性搜索分片/路由

问题描述

我有一个多租户系统,我正在尝试设计 ElasticSearch 以支持多租户。我在网上搜索过,但我发现的所有帖子在实践中都没有具体说明如何做到这一点。基本思想是在每个索引上,每个客户 1 个分片,并使用自定义路由来查询客户专用分片。这很清楚。现在,我该如何实现呢?如何为每个指定“键值”的索引创建多个分片,以便将来查询该特定分片?代码示例会有所帮助。

太感谢了。

标签: elasticsearchmulti-tenant

解决方案


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

你到底想达到什么目的?我假设您希望不同的用户(或者更好的是不同的角色)可以访问索引的不同部分。在这种情况下,您应该查看文档级安全权限

在实践中如何做到这一点?假设您有一个名为 的索引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}}"
    }
  ]
}

推荐阅读