Я создаю основу для spring-data -asticsearch в качестве учебного проекта.Мой вопрос касается тега @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";
}
}
Class Duck расширяет TwoLeggedAnimals, что, в свою очередь, расширяет класс "Animals" и, таким образом, Duck отвечает требованиям для создания индекса.То же самое объяснение для класса лошади
class Horse extends FourLeggedAnimals {
Horse() {
this.name = Horse.class.getSimpleName();
}
@Override
public String makeSomeNoise() {
return "neigh";
}
}