У меня есть несколько индексов, в которых я сохраняю продукты:
product-example1
product-example2
product-example3
product-example4
product-example5
У меня есть документ в поиске elasti c, который имеет одинаковую структуру и может использоваться для разных индексов:
@Data
@org.springframework.data.elasticsearch.annotations.Document(indexName = "", type = "", createIndex = false)
public class ProductDocument {
@Id
private String id;
private String title;
private String seller;
private String releaseDate;
....
}
Так что в основном я хочу использовать те же настройки, те же сопоставления, тот же сервис поиска. Итак, я сделал indexName
и type
параметри c в весенней загрузке java, вместо того, чтобы создавать 5 классов, расширяющих ProductDocument
?
@Autowired
private final ElasticsearchTemplate elasticsearchTemplate;
this.elasticsearchTemplate.createIndex("product-example1", loadFile("/files/settings.json"));
this.elasticsearchTemplate.putMapping("product-example1", "product-type1", loadFile("/files/mapping.json"));
this.elasticsearchTemplate.createIndex("product-example2", loadFile("/files/settings.json"));
this.elasticsearchTemplate.putMapping("product-example2", "product-type2", loadFile("/files/mapping.json"));
......
Теперь я хочу создать ProductRepository, но у меня нет класса с определенным именем индекса. Если я использую generi c class:
public interface DocumentRepository extends ElasticsearchRepository<ProductDocument, String> {
}
, я получаю ошибку, которая является полностью нестабильной, потому что я создал имена индексов в Dynami c способом: lang.IllegalArgumentException: Unknown indexName. Make sure the indexName is defined. e.g @ProductDocument(indexName="foo")
Так же Можно ли как-то создать репозиторий для индексов, которые я создал динамически c способом, как описано выше, и передать имя и тип индекса в качестве параметра?
Пожалуйста, помогите! Я застрял.