本文使用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 {@Autowiredprivate 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 {@Autowiredprivate 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来实现分页查询的两种方式