在使用es的过程中,有些时候会遇到搜索全部数据的场景,众所周知es最大的搜索的数量就是10000,那么碰到总数大于10000时,我们就要用到深度分页这个功能。
下面是一段浅写的深度分页的代码,供日后自己用
/**
*深度分页搜索
*
*/
public void deepSearch(){
SearchRequst searchRequst = new SearchRequst("索引名称");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//创建构造条件
searchSourceBuilder.source(searchSourceBuilder);
//执行搜索
Long total = 0L;
try{
//esMapper其实就是封装的restHighLevelClient
SearchResponse searchResponse = esMapper.search(searchRequest,RequestOptions.DEFAULT);
if(searchResponse == null
|| searchResponse.getHits().getHits() == null
|| searchResponse.getHits().getHits().length == 0){
log.info("深度分页搜索结果为空");
return null;
}
SearchHit[] searchHits = searchResponse.gitHit().git();
while(searchHits.length > 0){
total += searchHits.length;
searchSourceBuilder.searchAfter(searchHits[searchHits.length - 1].getSortValues());
searchResponse = esMapper.search(searchRequest,RequestOptions.DEFAULT);
if(searchResponse == null
|| searchResponse.getHits().getHits() == null
|| searchResponse.getHits().getHits().length == 0){
log.info("深度分页搜索结束循环!");
break;
}
searchHits = searchResponse.getHits().getHits();
}
}catch(IOException e){
log.error("深度分页搜索发生异常");
}
log.info("深度分页搜索结束,召回的文档总数为:{}",total);
}
本文介绍了在Elasticsearch中如何处理搜索结果超过10000条的场景,通过深度分页的代码示例展示了如何获取全部数据。在搜索过程中,当文档总数大于默认限制时,使用searchAfter方法进行分页,循环执行搜索直到所有数据都被检索出来。这是一个实用的方法来解决ES的分页问题。
1404

被折叠的 条评论
为什么被折叠?



