Elasticsearch 6 RestHighLevelClient:如何知道何时可以读取 IndexRequest 的结果?
Elasticsearch 6 RestHighLevelClient: How to know when the result of an IndexRequest is ready to be read?
我正在编写一个单元测试,我需要使用 Java Elasticsearch 6 库中的 RestHighLevelClient 写入 Elasticsearch 6 索引,然后从索引中读取。我如何知道何时可以通过 RestHighLevelClient.search 从索引中读取 IndexRequest 的结果?例如:
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)
部分完全写完后再进行读取操作?
想通了。如果以后有人碰巧遇到这个非常具体的问题,您需要包括:
client.refreshIndex(indexName)
介于写入和读取之间。 Elasticsearch 默认每 1 秒刷新一次,但如果您需要在写入后读取 <1 秒,您也可以明确地这样做。
这将强制刷新作为此请求的一部分。
request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
我正在编写一个单元测试,我需要使用 Java Elasticsearch 6 库中的 RestHighLevelClient 写入 Elasticsearch 6 索引,然后从索引中读取。我如何知道何时可以通过 RestHighLevelClient.search 从索引中读取 IndexRequest 的结果?例如:
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)
部分完全写完后再进行读取操作?
想通了。如果以后有人碰巧遇到这个非常具体的问题,您需要包括:
client.refreshIndex(indexName)
介于写入和读取之间。 Elasticsearch 默认每 1 秒刷新一次,但如果您需要在写入后读取 <1 秒,您也可以明确地这样做。
这将强制刷新作为此请求的一部分。
request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);