我们知道,ElasticsearchEntityMapper的每个实体都需要注释
@Document(indexName="foo")
public class Foo {...}
,以便我们可以使用方便的方法,例如:
<T> Page<T> queryForPage(SearchQuery query, Foo.class);
但是很普遍,elasticsearch的索引是基于时间或基于语言的。即
@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-data-elasticsearch这样设计实体?它不是很灵活。还是我误会了用法?
谢谢您的帮助! :)
您是正确的,将它与修订字符串一起使用并不灵活。
但是您也可以使用SpEL表达式作为索引名称。当使用ElasticsearchOperations
方法而不是存储库方法时,您可以传入索引的名称,这将覆盖@Document
注释中定义的名称。