Как я могу параметризовать индекс SpringData ElasticSearch во время выполнения?Динамический индекс с SpringData ElasticSearch
Например, модель данных:
@Document(indexName = "myIndex")
public class Asset {
@Id
public String id;
// ...
}
и репозиторий:
public interface AssetRepository extends ElasticsearchCrudRepository<Asset, String> {
Asset getAssetById(String assetId);
}
Я знаю, что могу заменить myIndex
с параметром, но этот параметр будет решен во время создания экземпляра/загрузки. У нас есть та же структура активов для нескольких клиентов/арендаторов, у которых есть свой собственный индекс. Что мне нужно что-то вроде этого:
public interface AssetRepository extends ElasticsearchCrudRepository<Asset, String> {
Asset getAssetByIdFromIndex(String assetId, String index);
}
или это
repoInstance.forIndex("myOtherIndex").getAssetById("123");
Я знаю, что это не работает из коробки, но есть ли способ программно «взломать» его?
[Этот ответ] (http://stackoverflow.com/questions/33894618/creating-indices-name-dynamically-in-elasticsearch-using-spring-data-elasticsear?s=1|2.2393) или [этот другой один] (http://stackoverflow.com/questions/24333327/rolling-index-dynamic-index-name-in-spring-data-elasticsearch?s=2|2.0926) должен помочь. – Val
Я считаю, что ни то, ни другое (не найдено и не изучалось раньше). Это касается не жесткого кодирования имени индекса, но мне нужно иметь возможность звонить ко многим различным индексам. Я знаю только имя индекса через клиентский параметр (не во время компиляции или загрузки) – Daniel
Gotcha, давайте найдем еще одно решение: – Val