茕茕白兔,东走西顾。衣不如新,人不如故。
D5KYY8.jpg

LazyBoy

Many ideas, too lazy to carry them out.

yY6nJI.png

Es5.x使用RestHighClient实现scroll深分页

public static void main(String[] args) throws IOException {
        RestClient restClient = RestClient.builder(
                new HttpHost("127.0.0.1", 9200, "http")).build();
            /*高level的客户端*/
            RestHighLevelClient client = new RestHighLevelClient(restClient);
            String indexName = "index_name";
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            List<Map<String,Object>> list = new ArrayList<>();
            list.clear();
            //1、创建SearchRequest
            SearchRequest request = new SearchRequest(indexName);
            //2、指定scroll的生存时间
            request.scroll(TimeValue.timeValueMinutes(2L));
            request.types("document_type");
            SearchSourceBuilder builder = new SearchSourceBuilder();
            ///3、指定每页查询条数
            builder.size(20);
            //3.1、排序
            builder.sort("_uid", SortOrder.DESC);
            //3.2、查询全部
            builder.query(QueryBuilders.matchAllQuery());
            request.source(builder);

        try {
            //4、获取返回结果 scrollId,source
            SearchResponse response = client.search(request);
            String scrollId = response.getScrollId();
            for(SearchHit hit:response.getHits().getHits()){
                //4.1、首页数据
                Map<String, Object> sourceAsMap = hit.getSourceAsMap();
                list.add(sourceAsMap);
            }
            while(true){
                // 5、循环创建SearchScrollRequest
                SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
                //6、再指定scroll的生存时间,若不指定它会归零
                scrollRequest.scroll(TimeValue.timeValueMinutes(2L));
                //7、执行查询获取结果
                SearchResponse scrollResp = client.searchScroll(scrollRequest);
                //8、判断是否查询到了数据输出
                SearchHit[] hits = scrollResp.getHits().getHits();
                if(hits != null && hits.length>0){
                    for(SearchHit hit : hits){
                        //循环输出
                        Map<String, Object> sourceAsMap = hit.getSourceAsMap();
                        list.add(sourceAsMap);
                    }
                }else {
                    //9、若无数据则退出
                    break;
                }
            }
            //10、创建ClearScrollRequest
            ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
            //11、指定scrollId
            clearScrollRequest.addScrollId(scrollId);
            //12、删除scrollId
            ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest);
            //13、根据它返回判断删除成功没
            boolean succeeded = clearScrollResponse.isSucceeded();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(list);
    }

 

posted @ 2021-06-30 11:11  lazyeye  阅读(451)  评论(0)    收藏  举报