Spring boot elasti c Поиск в репозитории - PullRequest
0 голосов
/ 04 марта 2020

У меня есть несколько индексов, в которых я сохраняю продукты:

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 способом, как описано выше, и передать имя и тип индекса в качестве параметра?

Пожалуйста, помогите! Я застрял.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...