Elasticsearch 使用java分页查询条数超过1w的解决办法 -search_after方式

针对每隔5分钟从Elasticsearch取数据推送的场景,当使用Java进行分页查询超过1w条数据时,原始方法导致数据丢失。本文提出使用`search_after`策略,通过设置排序字段解决此问题。首次查询无需设置`searchAfter`,后续查询根据上一次查询结果的最后一条记录的排序值进行。测试结果显示能成功获取并推送超过1w条数据。
摘要由CSDN通过智能技术生成

1.需求:job跑批每隔5分钟查询es数据取出并进行推送。

问题:原使用java分页查询es。当大于1w时无法取出后续数据造成了数据丢失。 使用scroll_id查询性能消耗太大不适应此场景.

es调用测试:

获取第一次查询结果后设置sort,

查询首条数据为

转换成java实现方式如下:

BillTraceElasticSearchRepository 
findInfoDocByScroll
 public Map<Object[],List<BillTraceElasticSearchDocument>> findInfoDocByScroll(BillTraceSearchVo billTraceSearchVo,Object[] sort) {
        List<BillTraceElasticSearchDocument> result = new ArrayList<>();
        Map<Object[],List<BillTraceElasticSearchDocument>> resultInfo=new HashMap<>();
        try {
            if(null == billTraceSearchVo){
                return null;
            }
            //查询请求对象
            SearchRequestBuilder srb = baseQuery(BillTraceElasticSearchDocument.class);
            //查询条件
            BoolQueryBuilder bqb = QueryBuilders.boolQuery();
            // 添加时间范围查询
            if(null != billTraceSearchVo.getStartTime()
                    && null != billTraceSearchVo.getEndTime()
                    && billTraceSearchVo.getEndTime() > billTraceSearchVo.getStartTime()){
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值