我的单元/集成测试包括对搜索功能的测试。如何清除ElasticSearch索引?
我的想法是在每次测试前都有空搜索索引。所以,我想,以消除setup
方法在指数的所有元素(这是Groovy代码):
Client client = searchConnection.client
SearchResponse response = client.prepareSearch("item")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(termQuery('name', 'test')) //tried also matchAllQuery()
.setFrom(0).setSize(100).setExplain(false).execute().actionGet()
List<String> ids = response.hits.hits.collect {
return it.id
}
client.close()
client = searchConnection.client
ids.each {
DeleteResponse delete = client.prepareDelete("item", "item", it)
.setOperationThreaded(false)
.execute().actionGet()
}
client.close()
看来,它的异步处理所有的缺失,所以我之后加入Thread.sleep(5000)
。正如你看到我试图打开/关闭连接几次 - 这并没有帮助。
这个问题有时需要更多的时间,有时需要更多的5秒才能删除,有时候它不能找到刚添加的数据(来自之前的测试)等等。而最令人讨厌的是,集成测试变得不稳定。把Thread.sleep()
放在可能看起来不太好的解决方案。
它有什么办法提交最后修改,或者做出锁,直到所有数据将被写入?
无需调用flush,只需调用API刷新,以确保您可以在索引的最新数据搜索。 – kimchy