如何在 spring data elasticsearch 中管理多个用户索引

How to manage multiple user indexes in spring data elasticsearch

在 spring 数据 elasticsearch 中,一个模型 class/entity 表示或映射到一个索引和类型。

例如:-

@Document(indexName = "myindex",type="mytype")
public class DocumentModel {
    ......
} 

我有一个用例,我应该用相同结构在不同的 es 索引中索引数据。如果是这种情况,我如何用这个模型 class 来表示所有这些指数?

Spring Data ES支持在@Document注解的索引名中使用SpEL表达式,像这样:

@Document(indexName = "myindex-#{userId}", type="mytype")
public class DocumentModel {
    ......
} 

因此,您可以访问 whole context offered by SpEL 以创建索引名称。

更新

如果您使用的是 elasticsearchTemplate,还有一个更简单的变体,您可以这样做:

IndexQuery indexQuery = new IndexQueryBuilder()
     .withId(docModel.getId())
     .withObject(docModel)
     .withIndex("myindex"+docModel.getUserId()).build();

withIndex("...") 的调用将覆盖您在 @Document 注释中的任何索引名称