【发布时间】:2019-04-22 12:07:52
【问题描述】:
我正在为 spring-data-elasticsearch 创建一个框架作为一个实践项目。 我的问题是关于 @Document 标记,它将根据注释的 indexName 参数中提供的名称创建索引。
但是,我在想是否可以让它动态化!在我的大多数用例中,索引名称将与类名称匹配。我所有的索引类都将扩展一个抽象类,该抽象类具有所有需要在实体类中完成的特定实现的通用实现。
这意味着,我必须为每个实体维护@Document 注释。但是由于所有实体都会扩展一个特定的抽象类,是否可以注释抽象类并以某种方式告诉spring使用类名作为索引名。
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "BaseClassName OR something like Animal.getName" /*And other index properties of-course*/)
abstract class Animal {
String name;
public String getName() {
return name;
}
public abstract String makeSomeNoise();
}
所有扩展 Animals 的具体类都将在 Elasticserch 中建立索引。
abstract class TwoLeggedAnimals extends Animal {}
abstract class FourLeggedAnimals extends Animal {}
以上两个只是分组类。举例来说
class Duck extends TwoLeggedAnimals {
public Duck() {
this.name = Duck.class.getSimpleName();
}
@Override
public String makeSomeNoise() {
return "quack";
}
}
Duck 类扩展了 TwoLeggedAnimals,后者又扩展了“Animals”类,因此,Duck 有资格创建索引。 Horse类同解
class Horse extends FourLeggedAnimals {
Horse() {
this.name = Horse.class.getSimpleName();
}
@Override
public String makeSomeNoise() {
return "neigh";
}
}
【问题讨论】:
标签: java elasticsearch spring-data-elasticsearch