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);
}