SpringBoot整合ElasticSearch实现分页查询
- 软件开发
- 2025-08-05 13:03:02

本文使用SpringBoot整合ElasticSearch实现分页查询
文章目录 环境准备分页查询方式一方式二 本文小结环境准备
还是继续使用spring-boot-starter-data-elasticsearch来实现分页查询操作
<!-- spring-boot-starter-data-elasticsearch--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.6.6</version> </dependency>数据准备
分页查询 方式一
使用ElasticsearchRestTemplate来实现
import cn.wideth.po.Article; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.index.query.BoolQueryBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Slf4j @Api(value = "es分页查询测试") @RestController @RequestMapping("/api/listEs") public class ArticleListController { @Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; // 分页列表查询 // 旧版本的 Repository 中的 search 方法被废弃了。 // 这里采用 ElasticSearchRestTemplate @GetMapping("/pageList") @ApiOperation("ES分页查询-方法一") public Map pageList(Integer currentPage, Integer limit) { NativeSearchQuery query = new NativeSearchQuery(new BoolQueryBuilder()); query.setPageable(PageRequest.of(currentPage, limit)); // 方法1: SearchHits<Article> searchHits = elasticsearchRestTemplate.search(query, Article.class); List<Article> articles = searchHits.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList()); Map jsonResult = new LinkedHashMap<>(); jsonResult.put("count", searchHits.getTotalHits()); jsonResult.put("articles", articles); return jsonResult; } }程序结果
方式二
使用ElasticsearchOperations来实现
import cn.wideth.po.Article; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.elasticsearch.index.query.BoolQueryBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Slf4j @Api(value = "es分页查询测试2") @RestController @RequestMapping("/api/listEs") public class ArticleListTwoController { @Autowired private ElasticsearchOperations elasticsearchOperations; // 分页列表查询 // 旧版本的 Repository 中的 search 方法被废弃了。 // 这里采用 ElasticsearchOperations 来进行分页查询 @GetMapping("/pageList2") @ApiOperation("ES分页查询-方法二") public Map pageList2(Integer currentPage, Integer limit) { NativeSearchQuery query = new NativeSearchQuery(new BoolQueryBuilder()); query.setPageable(PageRequest.of(currentPage, limit)); // 方法2: SearchHits<Article> searchHits = elasticsearchOperations.search(query, Article.class); List<Article> articles = searchHits.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList()); Map jsonResult = new LinkedHashMap<>(); jsonResult.put("count", searchHits.getTotalHits()); jsonResult.put("articles", articles); return jsonResult; } }程序结果
本文小结
本文记录了SpringBoot整合ElasticSearch来实现分页查询的两种方式
SpringBoot整合ElasticSearch实现分页查询由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“SpringBoot整合ElasticSearch实现分页查询”