弹性搜索分片/路由

时间:2019-03-08 14:41:38

标签: elasticsearch multi-tenant

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

非常感谢您。

1 个答案:

答案 0 :(得分:0)

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

您到底想实现什么?我假设您希望不同的用户(或者更好的是,不同的角色)可以访问索引的不同部分。在这种情况下,您应该看看document-level security permissions

如何在实践中实现这一目标?假设您有一个名为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}}"
    }
  ]
}