使用 RestHighLevelClient 进行 Elasticsearch 分页查询

在处理大量数据的搜索应用中,分页查询是一种常见的需求。Elasticsearch 以其灵活的搜索能力,支持高效的分页查询操作。本文将介绍如何在 Java 应用程序中使用 Elasticsearch 的 RestHighLevelClient 执行分页查询,并展示如何结合排序进行结果的有序展示。

环境准备

确保你的项目中已经添加了 Elasticsearch 客户端库的依赖。如果使用 Maven,可以在 pom.xml 文件中添加如下依赖:

xml 复制代码
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level</artifactId>
    <version>7.10.0</version> <!-- 使用适合的版本号 -->
</dependency>

分页查询示例

1. 分页查询基础

在 Elasticsearch 中,可以通过设置 fromsize 参数来实现分页查询。

Java Code
java 复制代码
@Test
void testPagination() throws IOException {
    // 页码,每页大小
    int page = 1, size = 5;
    // 1. 准备 SearchRequest
    SearchRequest request = new SearchRequest("hotel"); // 指定索引名称

    // 2. 准备 DSL 查询
    request.source()
            .query(QueryBuilders.matchAllQuery()) // 查询所有文档
            .sort("price", SortOrder.ASC) // 按价格升序排序
            .from((page - 1) * size) // 分页开始位置
            .size(size); // 每页大小

    // 3. 发送请求
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);

    // 4. 解析响应
    handleResponse(response);
}
DSL Equivalent
json 复制代码
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 5
}

2. 响应处理

定义一个通用方法来处理搜索响应,打印结果。

java 复制代码
private void handleResponse(SearchResponse response) throws IOException {
    SearchHits searchHits = response.getHits();
    long total = searchHits.getTotalHits().value;
    System.out.println("共搜索到 " + total + " 条数据");

    for (SearchHit hit : searchHits.getHits()) {
        String json = hit.getSourceAsString();
        System.out.println(json);
    }
}

结语

Elasticsearch 的分页查询功能通过简单的 API 调用即可实现,结合 fromsize 参数,我们可以轻松地对搜索结果进行分页处理。在实际应用中,分页查询可以显著提高用户体验和后端性能。本文提供的示例代码展示了如何使用 Java 的 RestHighLevelClient 进行分页查询,并给出了对应的 DSL 查询语句,帮助你更好地理解和使用 Elasticsearch 的分页功能。

相关推荐
Elastic 中国社区官方博客31 分钟前
一个查询,无限 Elasticsearch Serverless 项目:跨项目搜索介绍
大数据·elasticsearch·搜索引擎·信息可视化·云原生·serverless·全文检索
samFuB1 小时前
【数据集】中国已签署双边投资协定(BIT)数据(2000-2025年)
大数据
TDengine (老段)1 小时前
TDengine 存储引擎概览 — TSDB 分层存储架构与数据流转全景
大数据·数据库·物联网·架构·时序数据库·tdengine·涛思数据
zhojiew1 小时前
使用Debezium读取CDC事件并通过Flink任务写入Paimon表来构建实时数据管道的实践
大数据·flink
zhojiew1 小时前
使用AWS中国区Lambda集成Glue Schema Registry消费Kafka消息的实践
大数据·spark·etl
2601_949936962 小时前
2026会计人员能力及学习提升方向指导
大数据·人工智能
ACP广源盛139246256733 小时前
OpenAI 推出的 GPT-5.5 大模型,倒逼接口芯片升级迭代@ACP#IX8012应用迭代
大数据·网络·人工智能·嵌入式硬件·电脑·音视频
2601_956002813 小时前
钢铁雄心4/Hearts of Iron IV2026官方正版最新版pc免费下载(看到请立即转存 资源随时失效)手机版通用
大数据·游戏·游戏引擎·动画·游戏策划
阳艳讲ai3 小时前
九尾狐AI 2026年战略级更新:专注1对1深度陪跑,重新定义中小企业AI落地实战与变现的行业服务标准
大数据·人工智能·企业ai培训·九尾狐ai
iiiiyu3 小时前
面向对象案例
java·大数据·开发语言·数据结构·python·编程语言