索引未找到例外

时间:2017-05-16 14:36:28

标签: java elasticsearch jhipster spring-data-elasticsearch

所以,又回来了

我有一个JHipster生成的项目,该项目使用elasticsearch中嵌入的java spring boot个客户端。

我最近对数据集进行了一些重大更改,因为我们一直在从不同的存储库迁移一大堆新数据

部署应用程序时,一切正常,所有SearchRepositories都没有问题,所有搜索功能都顺利

从测试环境运行时会出现问题。对application-test.yml文件和elasticsearch java配置文件没有任何改变。

我们有一些更新索引的代码,我已经运行了好几次,它似乎更新了clusters indices就好了,但我遇到的是target文件夹,它只是不会创建新的索引

在测试模式下运行时,有12个索引无法进入目标文件夹,但是由于标题中提到的错误,其中只有5个在ResourceIntTest失败了

我不想用数百条不相关的代码行来填写这篇文章,所以现在只需包含有助于测试不会失败的变通方法:

当在5个失败的测试用例的initTest中,如果我写下面的行(显然在每个不同的情况下更改类名):

surveyDataQualitySearchRepository.save(surveyDataQualityRepository.findAll());

然后索引将自己创建并且测试用例不会失败,但是这不需要手动执行,应该在调用resetIndex类中的IndexReinitializer方法时创建它部署

resetIndex:

@PostConstruct
public void resetIndex() {
        long t = currentTimeMillis();
        elasticsearchTemplate.deleteIndex("_all");
        t = currentTimeMillis() - t;
        logger.debug("ElasticSearch indexes reset in {} ms", t);
    }

注释这段代码也允许加载所有索引,但是不应该对它进行评论,因为它可以作为索引的更新程序,而且它在旧版本的应用程序中工作正常,它仍然指向旧的数据集

我将非常欢迎所有帮助,我已经花了将近一整天的时间来试图了解错误的来源,我也非常乐意上传任何可能与任何人相关的代码片段愿意在这里提供帮助。

编辑通过评论

为索引重建添加代码
@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);
    }

1 个答案:

答案 0 :(得分:3)

请尝试更新至spring-data-elasticsearch的最新版本