java - Índice no encontrado Excepción
elasticsearch jhipster (1)
Intente actualizar a la última versión de spring-data-elasticsearch
Entonces, de vuelta
Tengo un proyecto generado por JHipster
que usa un cliente JHipster
elasticsearch
incorporado en spring boot
.
Recientemente realicé algunos cambios importantes en los conjuntos de datos, ya que hemos estado migrando una gran cantidad de datos de diferentes repositorios
Al implementar la aplicación, todo funciona bien, todos los SearchRepositories
búsqueda se cargan sin problemas y todas las capacidades de búsqueda se SearchRepositories
sin problemas.
Los problemas surgen cuando se ejecuta desde el entorno de prueba. No ha habido ningún cambio en el archivo application-test.yml
ni en el archivo de configuración application-test.yml
java.
Tenemos un código que actualiza los índices y lo he ejecutado varias veces, parece actualizar los clusters indices
, pero cuando sufro está en la carpeta de target
, simplemente no crea los nuevos índices.
Hay 12 índices que no puedo obtener en la carpeta de destino cuando se ejecuta en modo de prueba, sin embargo, solo 5 de ellos fallan en su ResourceIntTest
debido al error mencionado en el título.
No quiero llenar esta publicación con cientos de líneas de código irrelevantes, por lo que basta por ahora incluir la solución alternativa que ayuda a las pruebas a no fallar:
Cuando initTest
en la initTest
de los 5 casos de prueba initTest
, si escribo la siguiente línea (obviamente cambiando el nombre de la clase en cada caso diferente):
surveyDataQualitySearchRepository.save(surveyDataQualityRepository.findAll());
A continuación, el índice se creará solo y el caso de prueba no fallará; sin embargo, esto no debería ser necesario hacerlo manualmente, debería crearse cuando se resetIndex
método resetIndex
en la clase IndexReinitializer
en la implementación.
resetIndex:
@PostConstruct
public void resetIndex() {
long t = currentTimeMillis();
elasticsearchTemplate.deleteIndex("_all");
t = currentTimeMillis() - t;
logger.debug("ElasticSearch indexes reset in {} ms", t);
}
Comentar este fragmento de código también permite cargar todos los índices, pero no debe comentarse, ya que sirve como un actualizador para los índices, además funciona bien en una versión anterior de la aplicación que aún apunta al antiguo conjunto de datos.
Toda la ayuda será bienvenida, he estado en este casi un día completo tratando de entender de dónde viene el error, también estoy más que feliz de cargar cualquier fragmento de código que pueda ser relevante para cualquiera que esté dispuesto a ayudar aquí.
EDITAR Para agregar código para la reconstrucción de índices según lo solicitado a través de comentarios
@Test
public void synchronizeData() throws Exception{
resetIndex();
activePharmaIngredientSearchRepository.save(activePharmaIngredientRepository.findAll());
countrySearchRepository.save(countryRepository.findAll());
dosageUnitSearchRepository.save(dosageUnitRepository.findAll());
drugCategorySearchRepository.save(drugCategoryRepository.findAll());
drugQualityCategorySearchRepository.save(drugQualityCategoryRepository.findAll());
formulationSearchRepository.save(formulationRepository.findAll());
innDrugSearchRepository.save(innDrugRepository.findAll());
locationSearchRepository.save(locationRepository.findAll());
manufacturerSearchRepository.save(manufacturerRepository.findAll());
outletTypeSearchRepository.save(outletTypeRepository.findAll());
publicationSearchRepository.save(publicationRepository.findAll());
publicationTypeSearchRepository.save(publicationTypeRepository.findAll());
qualityReferenceSearchRepository.save(qualityReferenceRepository.findAll());
reportQualityAssessmentAssaySearchRepository.save(reportQualityAssessmentAssayRepository.findAll());
//rqaaQualitySearchRepository.save(rqaaQualityRepository.findAll());
rqaaTechniqueSearchRepository.save(rqaaTechniqueRepository.findAll());
samplingTypeSearchRepository.save(samplingTypeRepository.findAll());
//surveyDataQualitySearchRepository.save(surveyDataQualityRepository.findAll());
surveyDataSearchRepository.save(surveyDataRepository.findAll());
techniqueSearchRepository.save(techniqueRepository.findAll());
tradeDrugApiSearchRepository.save(tradeDrugApiRepository.findAll());
tradeDrugSearchRepository.save(tradeDrugRepository.findAll());
publicationDrugTypesSearchRepository.save(publicationDrugTypesRepository.findAll());
wrongApiSearchRepository.save(wrongApiRepository.findAll());
}
private void resetIndex() {
long t = currentTimeMillis();
elasticsearchTemplate.deleteIndex("_all");
t = currentTimeMillis() - t;
logger.debug("ElasticSearch indexes reset in {} ms", t);
}