为了账号安全,请及时绑定邮箱和手机立即绑定

Elasticsearch 6 RestHighLevelClient:如何知道何时准备好读取

Elasticsearch 6 RestHighLevelClient:如何知道何时准备好读取

翻过高山走不出你 2021-09-26 17:14:55
我正在编写一个单元测试,我需要使用 Java Elasticsearch 6 库中的 RestHighLevelClient 写入 Elasticsearch 6 索引,然后从索引中读取。我如何知道何时可以通过 RestHighLevelClient.search 从索引中读取 IndexRequest 的结果?例如:RestHighLevelClient client;//client initializationBulkRequest request = new BulkRequest();request.add(new IndexRequest(...));BulkResponse response = client.bulk(request);//process responseSearchRequest request = new SearchRequest(...);SearchResponse scrollResponse = client.search(request);//scrollResponse is empty!基本上,如果我在写入和读取之间放置一个 Thread.sleep,响应就会包含我写的内容,所以我认为请求是正确的。有没有一种方法可以确保client.bulk(request)在我执行读取操作之前等到部件完全完成写入?
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

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

request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);


查看完整回答
反对 回复 2021-09-26
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

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

client.refreshIndex(indexName)

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


查看完整回答
反对 回复 2021-09-26
  • 2 回答
  • 0 关注
  • 184 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信