在 Elasticsearch 中具有不同 index/type 的不同类型具有相同名称的字段名称

Field names with the same name across types having different index/type in Elasticsearch

我已经阅读了很多关于 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).

我从文档中找到上面的引用 here

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

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

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

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

现在,根据我从上面引述的理解,这意味着从技术上讲,即使我可以提供此映射,也不推荐这样做,因为在 Lucene 的深处以相同的方式处理它们。

我的问题是:

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

2) 还有其他解决方法吗?考虑到如果我有太多租户意味着我会有太多索引?

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

感谢所有帮助!

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

据我所知,集群中的索引数量没有限制 - 只有 "natural" 基于可用物理资源的限制。

此外,每个租户都有唯一的索引会给每个租户更少的 "astonishing" 搜索结果。如果它们在同一个索引中,则 TF-IDF 评分将因搜索词在所有其他租户的文档中出现的频率而产生偏差。

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