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

Sac*_*hin 1 elasticsearch spring-data spring-data-elasticsearch

在spring数据中,elasticsearch一个模型类/实体表示或映射到索引和类型.

例如: -

@Document(indexName = "myindex",type="mytype")
public class DocumentModel {
    ......
} 
Run Code Online (Sandbox Code Playgroud)

我有一个用例,我应该在具有相同结构的不同es索引中索引数据.如果是这种情况,我怎样才能用这个模型类表示所有这些索引?

Val*_*Val 5

Spring Data ES支持在@Document注释的索引名称中使用SpEL表达式,如下所示:

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

因此,您可以访问SpEL提供整个上下文,以便创建索引名称.

UPDATE

如果你正在使用elasticsearchTemplate,有一个更简单的变体,你可以这样做:

IndexQuery indexQuery = new IndexQueryBuilder()
     .withId(docModel.getId())
     .withObject(docModel)
     .withIndex("myindex"+docModel.getUserId()).build();
Run Code Online (Sandbox Code Playgroud)

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