Elasticsearch 6 RestHighLevelClient:如何知道 IndexRequest 的结果何时准



我正在编写一个单元测试,我需要使用 Java Elasticsearch 6 库中的 RestHighLevelClient 写入 Elasticsearch 6 索引,然后从索引中读取。我如何知道 IndexRequest 的结果何时准备好通过 RestHighLevelClient.search 从索引中读取?例如:

RestHighLevelClient client;
//client initialization
BulkRequest request = new BulkRequest();
request.add(new IndexRequest(...));
BulkResponse response = client.bulk(request);
//process response
SearchRequest request = new SearchRequest(...);
SearchResponse scrollResponse = client.search(request);
//scrollResponse is empty!

基本上,如果我在写入和读取之间放置一个 Thread.sleep,则响应具有我编写的内容,因此我认为请求是正确的。有没有办法确保等到client.bulk(request)部分完全完成写入后再执行读取操作?

这将强制刷新作为此请求的一部分。

request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);

想通了。如果将来有人碰巧遇到这个非常具体的问题,您需要包括:

client.refreshIndex(indexName)

在写入和读取之间。默认情况下,Elasticsearch 每 1 秒刷新一次,但如果需要在写入后读取 <1 秒,您也可以显式执行此操作。

最新更新