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;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值