<aside> 💡 ES为了避免深分页,不允许使用分页(from&size)查询10000条以后的数据,因此如果要查询第10000条以后的数据,要使用ES提供的 scroll(游标) 来查询
</aside>
@Test
public void testScorll() {
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
NativeSearchQuery build = new NativeSearchQueryBuilder()
.withQuery(boolQueryBuilder)
.withIndices().build();
//获取s
Page<PatientInfo> patientInfos = elasticsearchTemplate.startScroll(1000, build, PatientInfo.class);
printJson(patientInfos);
Page<PatientInfo> nextPatientInfos = elasticsearchTemplate.continueScroll(((AggregatedPageImpl) patientInfos).getScrollId(), 1000, PatientInfo.class);
printJson(nextPatientInfos);
}
查询全部
/**
* query all by searchQuery from es
* @author fujian
*
*/
public <T> List<T> queryAll(SearchQuery searchQuery, Class<T> T) {
String scrollId = scan(searchQuery, 5000l, false);
List<T> entities = new ArrayList<>();
boolean hasRecords = true;
while (hasRecords) {
SearchResponse searchResponse = getClient().prepareSearchScroll(scrollId).
setScroll(new TimeValue(5000l)).execute().actionGet();
Page<T> page = getResultsMapper().mapResults(searchResponse, T, null);
if(page.hasContent()) {
entities.addAll(page.getContent());
scrollId = searchResponse.getScrollId();
} else {
hasRecords = false;
}
}
clearScroll(scrollId);
return entities;
}