You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:05:24