elasticsearch IT 保存等待

elasticsearch IT save wait

我想使用 elasticsearch 进行集成测试,在尝试进行测试以查看对象是否已成功保存和删除时,我注意到 ES 没有立即为文档编制索引,但不得不稍等片刻(比如1 秒),有没有办法告诉我的保存方法立即建立索引?

这是我的测试:

@Test
public void SurveySaveDelete(){
    Object lock = new Object();
    synchronized (lock) {
        Survey survey = new Survey();
        survey.setEvaluated("evaluated");
        survey.setEvaluator("evaluator");
        survey.setTimestamp("2017-1-30");
        Survey returnedSaveSurvey = new Survey();
        Survey foundSurvey = new Survey();
        returnedSaveSurvey = elasticsearchSurveyRepository.saveSurvey(survey);

        try {
            lock.wait(1500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        foundSurvey = elasticsearchSurveyRepository.findSurvey("evaluator", "evaluated", "2017-1-30");
        assertEquals("evaluated", foundSurvey.getEvaluated());
        assertEquals("evaluator", foundSurvey.getEvaluator());
        assertEquals("2017-1-30", foundSurvey.getTimestamp());

        assertEquals("evaluated", returnedSaveSurvey.getEvaluated());
        assertEquals("evaluator", returnedSaveSurvey.getEvaluator());
        assertEquals("2017-1-30", returnedSaveSurvey.getTimestamp());
        boolean wasDeleted;
        wasDeleted = elasticsearchSurveyRepository.deleteSurvey("evaluator", "evaluated", "2017-1-30");
        assertEquals(true, wasDeleted);
    }
}

如您所见,我使用了一个锁定对象让我的测试稍等片刻,但我不确定是否有其他方法可以做到这一点 (我正在学习如何编码,请耐心等待 xD)

这是我的保存方法:

 @Override
public Survey saveSurvey(Survey survey) {
    Index index = new Index.Builder(survey).index(surveyIndexName).type(surveyTypeName).build();
    try {
        client.execute(index);
        return survey;
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}

您可以在插入后手动刷新索引。

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-refresh.html

client.admin().indices().prepareRefresh(indices).execute().get()

您可以强制刷新 RefreshRequestBuilder