发布网友 发布时间:2022-04-27 00:36
共1个回答
热心网友 时间:2022-05-03 03:31
我们经常有这样的需求,在对 Elasticsearch 数据进行操作的时候,要及时返回刚刚操作完毕的数据,或者数据列表。
比如加入存储一条数据后,我马上要返回数据的总条数,这个时候,会出问题,Elasticsearch会返回操作之前的数据,也就是假如开始有500条数据,我Insert了一条进去,按道理来说应该是501条,但是这个时候查询会发现,只有500条数据,再次请求又得到501条数据,这个是怎么回事呢?
这个问题因为 Elasticsearch 有延迟的关系(好像记得是3秒还是1秒来着)。有的人的做法比如有以下方法解决的。
Thread.sleep(3000L);
还有再请求一次的。但这些都不是解决方案,当你知道有方法的时候,你会自己笑自己。
其实我看过这个网站的博客里有用到,但是群主没提到这个方法的作用。
在:http://www.sojson.com/blog/88.html里有一句代码,如下:
BulkRequestBuilder bulkRequest = ESTools.client.prepareBulk().setRefresh(true);
这里的setRefresh(true);
就是自动刷新的用处。所以在我们CRUD的时候,如果对数据增删改操作的时候,如果要及时返回最新数据,那么我们就需要加这个方法,及时刷新数据。
当然 Elasticsearch 也是可以配置刷新时间的,但是没必要,频繁的刷新会造成压力过大。