正如我们所知,ElasticsearchEntityMapper的每个实体都需要注释
@Document(indexName="foo")
public class Foo {...}
,这样我们就可以使用方便的方法,比如:
<T> Page<T> queryForPage(SearchQuery query, Foo.class);
但弹性搜索的索引通常是基于时间或语言设计的。即
@Document(indexName="2019")
public class Foo {...}
@Document(indexName="2020")
public class Foo {...}
或
@Document(indexName="english")
public class Foo {...}
@Document(indexName="german")
public class Foo {...}
当然,我们不能创建这样的类,一个具有不同索引的类。在这种情况下我们该怎么办?每个指数一类,Foo2019,Foo2020<-非常糟糕的主意。
我想知道,为什么spring数据会以这种方式弹性搜索设计实体?它不是很灵活。或者我误解了用法?
提前感谢您的帮助!:(
您是对的,将其与修复字符串一起使用是不灵活的。
但是,也可以使用SpEL表达式作为索引名称。当使用ElasticsearchOperations
方法而不是存储库方法时,可以传入索引的名称,这将覆盖@Document
注释中定义的名称。