у меня возникают проблемы с конфликтом псевдонимов с использованием spring-data-es,
Мне нужен ежедневный пролонгированный индекс - A_Day1, A_Day2, ... A_now() с псевдонимом:
1. active_A - points to latest index - A_now()
*Persistence should be done on this alias*
2. search_A - points to all existing indexes + A_now()
*Search should be done on this alias*
Мой объект документа содержит indexName search_A,
@Document(indexName = "search_A", indexType = "..."),
Это приводит к тому, что каждый раз, когда выполняется поисковый запрос, либо через репозиторий (findBy....), либо через ElasticTemplate.queryForPage(Query, Clazz.class) для поиска на этом псевдониме - и, таким образом, поиск по всем существующим индексам, который работает, как ожидалось.
Проблема возникает на постоянном -
Используя репозиторий spring-data-es, я сохраняю объекты во всех циклах документального сохранения.
repository.save(Entity),
Spring-data-es будет сканировать indexName и сохраняться, что означает, что теперь постоянство относится к (search_A) псевдониму и НЕ для псевдонима active_A, который не работает, как ожидалось.
Я подумал о нескольких обходные решения, которые не являются элегантными и расточительными IMO:
Аналогичная проблема выявлена здесь - Как взаимодействовать с эластичным поиском Alias с использованием данных Spring но я ищу решение, которое не переопределяет/не создает пользовательскую реализацию, так как это было бы слишком много, чтобы не использовать заданные методы репозитория.
Ищу лучшее решение, если это возможно, или понимание того, как изменить свой дизайн / идею :)
Я думаю, что третий способ является самым элегантным, просто нужно сделать это способом Spring.
Создайте новый класс AbstractElasticsearchRepositoryEx, который расширяет AbstractElasticsearchRepository, а затем зарегистрируйте его как переопределенный базовый класс для репозиториев ES в файле конфигурации:
<elasticsearch:repositories base-package = "com.amco.db.repository.elasticsearch" base-class = "com.amco.db.repository.elasticsearch.AbstractElasticsearchRepositoryEx"/>
Теперь мы можем переопределить любой метод репозитория, который мы хотим расширить логикой, например. спасти(). Мы могли внутри определить, какой тип Документа мы получили в этом методе, и выбрать способ исполнения - специальный для этого Документа, который должен быть персистентным с использованием псевдонима активный_А, и обычный для любого другого.
Вот ссылка на официальную документацию по этому поводу: https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#repositories.customize-base-repository