public void scrollDemo() {
//transportClient配置自行处理,此处不做演示
SearchResponse scrollResp = transportClient.prepareSearch("order_stage")//指定index
.setTypes("order")//指定type
//.addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)//指定排序
//.setQuery(QueryBuilders.termQuery("user","张三"))//指定搜索条件
.setScroll(TimeValue.timeValueSeconds(30)) //每次查询所需的时间,超时自动释放scroll,根据具体业务场景设置,scroll长时间不释放会占用内存影响效率,不要设置太大
.setSize(1000).get(); //每次查询的数量
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
//业务处理逻辑
}
scrollResp = transportClient.prepareSearchScroll(scrollResp.getScrollId()).setScroll(TimeValue.timeValueSeconds(30)).execute().actionGet();
} while (scrollResp.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.
//处理完成及时释放scroll
clearScroll(transportClient, scrollResp.getScrollId());
}
/**
* 清除滚动ID
*
* @param client
* @param scrollId
* @return
*/
public boolean clearScroll(Client client, String scrollId) {
ClearScrollRequestBuilder clearScrollRequestBuilder = client.prepareClearScroll();
clearScrollRequestBuilder.addScrollId(scrollId);
ClearScrollResponse response = clearScrollRequestBuilder.get();
log.info("清除游标成功。。。");
return response.isSucceeded();
}
|