67,549
社区成员




楼主,后面怎么解决的????
SearchRequest searchRequest = null ;
if(search.getScrollId()==null){
//第一页时scrollId为NULL,需要添加index和查询条件;除了第一页后面的就不需要添加index和条件
searchRequest = new SearchRequest();
Set<SearchTypeEnum> types = search.getTypes();
//添加index
addIndices(types,searchRequest);
// 使用首选项参数(例如,执行搜索以首选本地分片)。默认值是跨分片随机化
searchRequest.preference("_local");
//trackTotalHits(true) 命中数据大于10000条时,也能返回准确的条数
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder().trackTotalHits(true);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
sourceBuilder.query(boolQueryBuilder(search));
//排序
SortBuilder sortBuilder = SearchParse.createSortBuilder(search.getOrderBy());
sourceBuilder.sort(sortBuilder);
//每页大小
sourceBuilder.size(search.getPageSize());
searchRequest.source(sourceBuilder);
System.out.println(sourceBuilder.toString());
}
SearchScrollVo searchScrollVo = new SearchScrollVo();
// 深分页分页
//深分页数据快照保存时间;每次请求刷新保存时间
final Scroll scroll = new Scroll(TimeValue.timeValueMinutes(2L));
SearchResponse response = null;
try {
if(search.getScrollId()==null){
//请求第一页时进入
searchRequest.scroll(scroll);
response = client.search(searchRequest, RequestOptions.DEFAULT);
}else{
SearchScrollRequest scrollRequest = new SearchScrollRequest(search.getScrollId());
scrollRequest.scroll(scroll);
response = client.scroll(scrollRequest,RequestOptions.DEFAULT);
}
//每次请求获取scrollId,并返回给前台,便于请求下一页
searchScrollVo.setScrollId(response.getScrollId());
RestStatus status = response.status();
if(status == RestStatus.OK){
SearchHits hits = response.getHits();
TotalHits totalHits = hits.getTotalHits();
long numHits = totalHits.value;
List<.....> datas = new ArrayList<>();
if(numHits > 0){
SearchHit[] searchHits = hits.getHits();
//把获取的数据添加到集合中
for (SearchHit hit : searchHits){
.......
}
.......
}
return ......;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
int limit=0;
for (SearchHit hit:hits.getHits()) {
if(limit==page){
break;
}
String hitString = hit.getSourceAsString();
list.add(hitString);
// 在这里取索引1-20
limit++;
}