1

我已经阅读了很多关于 Elasticsearch 中的映射的内容,这是我发现的一些有趣的东西

Field names with the same name across types are highly recommended to have
 the same type and same mapping characteristics (analysis settings for 
example). There is an effort to allow to explicitly "choose" which field to 
use by using type prefix (my_type.my_field), but it’s not complete, and there 
are places where it will never work (like faceting on the field).

我从这里的文档中找到了上面的引用

现在我的用例就是这样。这是一个例子。假设some field在tenant1 中必须具有以下映射(对于给定的实体用户):

{
  "tenantId1_user": {
    "properties": {
      "someField": {
        "type": "string",
        "index":"analyzed"
      }
    }
  }
}

现在,对于不同租户中的相同字段(对于相同的实体类型,比如说用户),类型必须更改如下:

{
  "tenantId2_user": {
    "properties": {
      "someField": {
        "type": "int",
        "index":"analyzed"
      }
    }
  }
} 

现在从我从上面的引用中了解到,这意味着即使我可以提供这种映射,技术上也不推荐,因为 Lucene 以同样的方式处理它们。

我的问题是:

1)如何处理我的用例?我是否应该在不同的索引中分离出每个租户,这样我就不必担心这个映射?

2)还有其他解决方法吗?考虑到如果我有太多租户,这意味着我将拥有太多索引这一事实?

3)这个用例的推荐方法是什么?

所有帮助表示赞赏!

4

1 回答 1

2

在您的方案中,您应该为每个租户使用一个索引。

AFAIK,集群中的索引数量没有限制 - 只有基于可用物理资源的“自然”限制。

此外,每个租户都有唯一的索引将使每个租户的搜索结果不那么“惊人”。如果它们在同一索引中,则 TF-IDF 评分将因搜索词在所有其他租户的文档中出现的频率而产生偏差。

旁注(基于 IRC 中提出的其他问题):任何接收索引请求或搜索请求的节点都有集群元数据,指定哪些节点具有哪些索引的分片,因此,仅将请求转发到适当的节点。另外,不要担心每个节点上都有每个索引的分片。就其本身而言,该模型不会对您的部署做出任何有用的贡献。

于 2015-03-14T20:00:44.110 回答