具有spring-data-elasticsearch的多租户

mir*_*vic 8 elasticsearch spring-data spring-data-elasticsearch

有没有办法让spring-data-elasticsearch适用于多租户应用?

我已经让它在没有多租户的情况下工作了,但我不知道如何为每个租户提供多个索引或多个节点?我想知道是否有任何方法可以为每个租户定义不同的索引名称,或者在我的实体类中添加临时属性,该实体类已正确注释@Document(...).当我试图做到这个问题时,那@Transient也是标记的ElasticSearchRepository.任何的想法?

Ben*_*n M 3

首先,您必须了解 Elasticsearch(尤其是 Lucene)如何存储数据。

Elasticsearch 的命名约定“索引”和“类型”有点误导,很可能不是您首先想到的!


如果您在 Elasticsearch 中的索引中创建类型 ( id, field1, field2),它将创建类似于 SQL 表的内容:

id     | field1 | field2
-------------------------
string | int    | boolean
Run Code Online (Sandbox Code Playgroud)

您可能id, type2field想到的是,当您向该索引添加第二个类型 ( ) 时会发生什么。索引映射将变为:

id     | field1 | field2  | type2field
--------------------------------------
string | int    | boolean | string
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为没有类型映射——即使 Elasticsearch 会让它看起来像那样。只有索引级别的映射!这样,您很可能最终会得到很多空白字段。


虽然一般来说,特别是对于多租户设置,您应该为每个类创建一个索引-而不是类型!您应该使用类型来分隔相似形状的数据,即为您的租户使用类型。或者向您的映射添加一个附加字段以识别租户。


在这里阅读更多相关信息:https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html#_type_takeaways