Bài kiểm tra đơn vị/tích hợp của tôi đơn vị/tích hợp bao gồm các thử nghiệm cho chức năng tìm kiếm.Làm cách nào để xóa chỉ mục ElasticSearch?
Ý tưởng của tôi là có chỉ mục tìm kiếm trống trước mỗi bài kiểm tra. Vì vậy, tôi đang cố gắng để loại bỏ tất cả các yếu tố trong chỉ mục trên setup
phương pháp (nó là mã 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()
Có vẻ như là nó xử lý tất cả xóa không đồng bộ, vì vậy tôi đã thêm Thread.sleep(5000)
sau nó. Như bạn thấy tôi đang cố gắng để mở/đóng kết nối vài lần - nó không giúp đỡ ở đó.
Vấn đề đôi khi cần nhiều thời gian hơn, đôi khi cần thêm 5 giây để xóa, đôi khi nó không thể tìm thấy dữ liệu bổ sung (từ thử nghiệm trước), v.v. . Đặt Thread.sleep()
ở khắp mọi nơi, nơi có thể có vẻ như không phải là giải pháp tốt như vậy.
Có cách nào để cam kết thay đổi cuối cùng hoặc thực hiện khóa cho đến khi tất cả dữ liệu sẽ được ghi?
Không cần phải gọi xả, chỉ cần gọi API làm mới để đảm bảo bạn có thể tìm kiếm trên dữ liệu được lập chỉ mục gần đây nhất. – kimchy