Elasticsearch刷新
我们经常有这样的需求,在对 Elasticsearch 数据进行操作的时候,要及时返回刚刚操作完毕的数据,或者数据列表。
比如加入存储一条数据后,我马上要返回数据的总条数,这个时候,会出问题,Elasticsearch会返回操作之前的数据,也就是假如开始有500条数据,我Insert了一条进去,按道理来说应该是501条,但是这个时候查询会发现,只有500条数据,再次请求又得到501条数据,这个是怎么回事呢?
这个问题因为 Elasticsearch 有延迟的关系。
Elasticsearch操作数据后马上更新的办法,在写入、更新、删除后立即执行刷新数据,通过设置.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
即可。
当然 Elasticsearch 也是可以配置刷新时间的,但是没必要,频繁的刷新会造成压力过大。
示例如下:
update后立即更新数据
UpdateRequest request = new UpdateRequest(ES_INDEX, ES_TYPE, keyId).doc(body, XContentType.JSON);
//写入完成立即刷新
request.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
UpdateResponse updateResponse = Proxy.getRestHighLevelClient(host).update(request);
批量更新
public BulkItemResponse[] esBulk(BulkRequest bulkRequest) throws IOException {
long start = System.nanoTime();
//写入完成立即刷新
bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
BulkResponse updateResponse = Proxy.getRestHighLevelClient(host).bulk(bulkRequest);
//记录耗时
double milliSecondTime = ElapsedTimeUtil.getElapsedTime(start);
Map<String, String> logTags = new HashMap<>();
logger.info("bulkRequest", "耗时:" + milliSecondTime + "/ms", logTags);
BulkItemResponse[] responses = updateResponse.getItems();
return responses;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律