2017-02-28 83 views
0

我想使用elasticsearch做一個集成測試,同時試圖做測試,看看對象是否成功保存和刪除我注意到ES沒有立即索引文件,但不得不等待一點點(如1秒),有沒有辦法告訴我的保存方法來索引?elasticsearch IT保存等待

這裏是我的測試:

@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); 
    } 
} 

,你可以看到我用的鎖定對象,使我的測試等待了一點,但我不能確定是否有另一種方式來做到這一點 (我「M學習如何編寫耐心請與我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); 
    } 
} 

回答

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

您可以通過RefreshRequestBuilder