当前位置: 首页 > news >正文

SpringBoot整合ElasticSearch实现分页查询

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

相关文章:

  • 【Python】01快速上手爬虫案例一
  • JVM-初始JVM
  • cmd_to_robot 讨论及 G29 控制优化
  • hcip----ospf
  • 2023年总结我所经历的技术大变革
  • 探索无尽可能性:C++深度优先搜索算法解析
  • Scrapy爬虫在新闻数据提取中的应用
  • Find My卡片正成为消费电子香饽饽,伦茨科技ST17H6x可以帮到您
  • Webpack5入门到原理20:Vue 脚手架搭建
  • Java-GUI
  • 服务器数据恢复—服务器进水导致阵列中磁盘同时掉线的数据恢复案例
  • 威联通QNAP NAS结合cpolar内网穿透实现公网远程访问NAS中存储的文件
  • matlab查看源代码
  • 加速应用开发:低代码云SaaS和源码交付模式如何选
  • P4769 [NOI2018] 冒泡排序 洛谷黑题题解附源码
  • ChatGPT 和文心一言哪个更好用?
  • Nginx_入门
  • js树形控件zTree使用总结
  • RabbitMQ-数据持久化
  • [150] 逆波兰表达式求值 js
  • 昆明一学校门外小吃摊占满人行道,城管:会在重点时段加强巡查处置
  • 经济日报刊文:品牌经营不能让情怀唱“独角戏”
  • 方正证券总裁何亚刚到龄退休,54岁副总裁姜志军接棒
  • 国防部:奉劝有关国家不要引狼入室,甘当棋子
  • 泉州一家婚介机构广告牌越南新娘七天闪婚领证?市监部门介入
  • 金球看淡,不服就干!这是抬不起腿却昂着头的劳塔罗