elacticsearch7.9.3 的scroll操作

使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来
scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的
采用基于_doc进行排序的方式,性能较高
每次发送scroll请求,我们还需要指定一个scoll参数,指定一个时间窗口,每次搜索请求只要在这个时间窗口内能完成就可以了

 public void autoOnlineGoodsSpuByOnlineTimeScroll(String onlineTime) {
        // 构建查询指定时间之前未上架的商品信息的请求体
        SearchSourceBuilder sourceBuilder = this.buildOnlineTimeGoodsSpuSource(onlineTime);

        // 查询请求
        SearchRequest searchRequest = new SearchRequest(goodsIndexAlias);
        // 指定scroll失效时间为60秒,
        Scroll scroll = new Scroll(TimeValue.timeValueSeconds(scrollExpireSeconds));
        searchRequest.scroll(scroll);
        // 设定每次查询数据量大小
        sourceBuilder.size(autoOnlinePageSize);
        searchRequest.source(sourceBuilder);

        try {
            LOGGER.info("ES请求参数:{}", searchRequest.source().toString());
            SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

            // scroll查询的id
            String scrollId = searchResponse.getScrollId();

            // 构建查询结果
            List<AdminGoodsSpu> adminGoodsSpuList = this.buildAutoOnlineSearchResult(searchResponse);

            while (!CollectionUtils.isEmpty(adminGoodsSpuList)) {
                // 自动上架商品
                autoOnlineGoodsSpu(adminGoodsSpuList);

                // 重新构建scroll查询
                SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
                scrollRequest.scroll(scroll);
                // 发起查询
                searchResponse = restHighLevelClient.scroll(scrollRequest, RequestOptions.DEFAULT);
                // scroll查询的id
                scrollId = searchResponse.getScrollId();
                // 构建查询结果
                adminGoodsSpuList = this.buildAutoOnlineSearchResult(searchResponse);
            }
            LOGGER.info("结束调用AdminGoodsServiceImpl类autoOnlineGoodsSpuWithBeforeTimeWithScroll方法");
        } catch (IOException e) {
            LOGGER.error("自动上架指定时间之前的商品", e);
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值