// 统计查询
CountRequest countRequest = new CountRequest();
countRequest.types("类型,按照版本进行使用");
countRequest.indices("索引");
// 构建查询参数
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 设置统计查询参数
countRequest.source(searchSourceBuilder);
// 统计数量
CountResponse countResponse = restHighLevelClient.count(countRequest,RequestOptions.DEFAULT);
// 获取数量
long count = countResponse.getCount();
if(count > 500000){throw new RumtimeException("下载数量不允许超过50W");
}
// 数量大于1W条时使用scroll进行下载数据
if (count > 10000) {searchSourceBuilder.size(10000);SearchRequest searchRequest = new SearchRequest("索引").types("类型,按版本判断是否使用");searchRequest.source(searchSourceBuilder);// 创建游标并设置过期时间Scroll scroll = new Scroll(TimeValue.timeValueMinutes(5L));// 设定游标searchRequest.scroll(scroll);// 执行查询,获取响应数据和游标IDSearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);String scrollId = searchResponse.getScrollId();SearchHit[] searchHits = searchResponse.getHits().getHits();// 收集数据集合List<SearchHit> searchHitList = new ArrayList<>(Arrays.asList(searchHits));while (true) {if (searchHits.length == 0) {break;}// 创建游标查询请求SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);// 设定游标时长scrollRequest.scroll(scroll);// 使用游标进行查询searchResponse = restHighLevelClient.scroll(searchScrollRequest, RequestOptions.DEFAULT);// 获取游标IDscrollId = searchResponse.getScrollId();// 获取数据searchHits = searchResponse.getHits().getHits();searchHitList.addAll(Arrays.asList(searchHits));}// 清除游标IDClearScrollRequest clearScrollRequest = new ClearScrollRequest();clearScrollRequest.addScrollId(scrollId);restHighLevelClient.clearScroll(clearScrollRequest,RequestOptions.DEFAULT);// TODO process 处理逻辑return;
}