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

时间:2016-08-08 05:02:08

标签: elasticsearch spring-data spring-data-elasticsearch

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

例如: -

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

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

1 个答案:

答案 0 :(得分:5)

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注释中的任何索引名称