如何删除弹性搜索索引?
2022-09-01 13:48:18
我的单元/集成测试包括搜索功能测试。
我的想法是在每次测试之前都有空的搜索索引。所以,我试图删除方法索引中的所有元素(它是Groovy代码):setup
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()
它有什么方法可以提交最后的更改,或者进行锁定,直到写入所有数据?