第一次用es深分页操作数据,数据可以正常遍历,游标是一样的,看百度说是每页数据游标应该是唯一的,根据游标上一页下一页
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("", ""));
RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost("29", , "http"), new HttpHost("", , "http"), new HttpHost("20.31", 0, "http"))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
@Override
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
});
client = new RestHighLevelClient(restClientBuilder);
System.out.println(client);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.size(2);
final Scroll scroll = new Scroll(TimeValue.timeValueSeconds(2));
sourceBuilder.query(boolBuilder);
sourceBuilder.sort("_supplemId", SortOrder.ASC);
SearchRequest searchRequest = new SearchRequest("xyklsmxb_20210430");
searchRequest.scroll(scroll);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = null;
try {
searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
assert searchResponse != null;
String scrollId;
do {
for (SearchHit hit : searchResponse.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
//每次循环完后取得scrollId,用于记录下次将从这个游标开始取数
scrollId = searchResponse.getScrollId();
System.out.println("scrollId---:"+scrollId);
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(scroll);
try {
//进行下次查询
searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
} while (searchResponse.getHits().getHits().length != 0);
//清除滚屏
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
//添加上一页scrollId继续查询
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = null;
try {
clearScrollResponse = client.clearScroll(clearScrollRequest,RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
boolean succeeded = false;
if (clearScrollResponse!=null){
succeeded = clearScrollResponse.isSucceeded();
System.out.println("完毕");
}