Java中RestHighLevelClient如何实现分页(指定每页大小)?
RestHighLevelClient 实现分页功能
你代码里的size参数就是每页大小(pageSize),之前的理解有误——from是当前页的起始偏移量,分页逻辑和Spring Data完全一致:from = (当前页码 - 1) * 每页大小
比如要查询第3页、每页15条数据,那from = (3-1)*15 = 30,size = 15,这样就会返回第31到45条数据。
另外要注意:默认情况下Elasticsearch在命中数超过10000条时会截断总条数统计,如果需要获取真实总条数来计算总页数,必须开启trackTotalHits:
// 定义分页参数 int pageNumber = 2; // 当前页码,从1开始计数 int pageSize = 10; // 每页展示的数据量 int from = (pageNumber - 1) * pageSize; SearchSourceBuilder sourceBuilder = new SearchSourceBuilder() .query(query) .from(from) .size(pageSize) .trackTotalHits(true); // 开启准确总条数统计,避免截断 SearchResponse response = esClient.search( new SearchRequest("person").source(sourceBuilder), RequestOptions.DEFAULT ); // 获取总命中数,用于计算总页数 long totalHits = response.getHits().getTotalHits().value; long totalPages = (totalHits + pageSize - 1) / pageSize; // 处理当前页的返回数据 SearchHit[] currentPageHits = response.getHits().getHits();
如果业务中频繁用到分页,还可以把分页参数计算、总页数统计逻辑封装成通用工具方法,减少重复代码。
内容的提问来源于stack exchange,提问作者Hayk Mkhitaryan
相关产品推荐
相关产品推荐

