返回顶部
首页 > 资讯 > 精选 >Spring Boot如何集成Elasticsearch模块实现简单查询功能
  • 287
分享到

Spring Boot如何集成Elasticsearch模块实现简单查询功能

2023-07-02 09:07:40 287人浏览 安东尼
摘要

这篇文章主要介绍“spring Boot如何集成elasticsearch模块实现简单查询功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Boot如何集成Elas

这篇文章主要介绍“spring Boot如何集成elasticsearch模块实现简单查询功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Boot如何集成Elasticsearch模块实现简单查询功能”文章能帮助大家解决问题。

    背景

    项目中我们经常会用搜索功能,普通的搜索我们可以用一个sql的like也能实现匹配,但是搜索的核心需求是全文匹配,对于全文匹配,数据库索引是根本派不上用场的,那只能全表扫描。全表扫描的速度已经非常慢了,还需要在每条记录上做全文匹配,一个字一个字的比对,导致查询的数据更慢。所以,使用数据来做搜索,性能上完全没法满足要求。

    系统集成

    引入jar

    <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-WEB</artifactId></dependency> <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-data-elasticsearch</artifactId>  </dependency>

    application.yml文件中添加ES配置

      elasticsearch:    rest:      uris: Http://localhost:9200

    注意:不同的ES版本,引入jar包和配送属性文件的方式不同,本文采用的是Spring Boot 2.2+Elasticsearch7.0的版本。

    创建文档实体

    @Document(indexName = "product", createIndex = true)public class Product implements Serializable{    private static final long serialVersionUID = -2408117939493050954L;    @Id    @Field(type = FieldType.Text)    private String id;    @Field(type = FieldType.Text)    private String skuNo;    @Field(type = FieldType.Text)    private String tilte;    @Field(type = FieldType.Double)    private BigDecimal price;        @Field(type = FieldType.Date, fORMat = DateFormat.basic_date_time)    private Date createDate;  }

    说明:

    • indexName:索引的名称

    • createIndex:ture表示如果不存在,则创建

    • @Id:索引id

    • @Field:type字段的类型,format:查询出时间格式化类型。

    接口实现

    public interface EsProductRepository extends ElasticsearchRepository<Product,String>{    List<Product> findByskuNoAndTilte(String sku,String title);}

    说明:集成ElasticsearchRepository接口,采用的是JPA的方式实现,JPA默认提供了相关的接口实现。

    具体实现

    Elasticsearch的实现分为基础查询和DSL查询。

    基础查询

    基础查询主要包含的CRUD查询,以及一些模糊、范围查询等。

    新增文档

    请求参数

    {     "id":"5",     "skuNo":"sku0005",     "tilte":"红楼梦",      "price":"93.37",      "createDate":"1514736000000"}

    说明:date类型传入的参数为long类型。

    Controller实现

     @PostMapping("/addProduct")    public Result addProduct(@RequestBody Product product)     {        esProductRepository.save(product);        Result result = new Result();        result.setCode(200);        result.setData(product);        return result;    }

    返回结果

    {    "data": {        "id": "5",        "skuNo": "sku0005",        "tilte": "红楼梦",        "price": 93.37,        "createDate": "2017-12-31T16:00:00.000+00:00"    },    "code": 200,    "msg": null}

    修改文档

    修改与新增基本相同,唯一区别为:请求参数传入的Id,如果存在则为修改,否则为新增。

    通过id查询文档信息

    Controller实现

       @GetMapping("/getProductById")    public Result getProductById(@RequestParam String id) {        Optional<Product> product = esProductRepository.findById(id);        return Result.success(product);    }

    删除文档

    Controller实现

        @PostMapping("/deleteById")    public Result deleteById(@RequestParam String id)     {        return  Result.success(null);    }

    分页查询

    Controller实现

     @GetMapping("/getPageList")    public Result getPageList(@RequestParam int pageNum,@RequestParam int pageSize)    {        Pageable pageable = PageRequest.of(pageNum, pageSize);        Page<Product> pageList= esProductRepository.findAll(pageable);        return Result.success(pageList);    }

    返回结果

    {    "data": {        "content": [            {                "id": "1",                "skuNo": "p0001",                "tilte": null,                "price": 99.9,                "createDate": null            },            {                "id": "3",                "skuNo": "p0002",                "tilte": null,                "price": 99.8,                "createDate": null            },            {                "id": "4",                "skuNo": "p0004",                "tilte": null,                "price": 110,                "createDate": null            },            {                "id": "L1zuVYEBuycvlc7eiQ7_",                "skuNo": "sku0001",                "tilte": "水浒传",                "price": 93.37,                "createDate": "1970-01-01T05:37:00.611+00:00"            },            {                "id": "5",                "skuNo": "sku0005",                "tilte": "红楼梦",                "price": 93.37,                "createDate": "2017-12-31T16:00:00.000+00:00"            }        ],        "pageable": {            "sort": {                "sorted": false,                "unsorted": true,                "empty": true            },            "offset": 0,            "pageSize": 5,            "pageNumber": 0,            "paged": true,            "unpaged": false        },        "aggregations": null,        "scrollId": null,        "maxScore": 1.0,        "totalPages": 1,        "totalElements": 5,        "number": 0,        "size": 5,        "sort": {            "sorted": false,            "unsorted": true,            "empty": true        },        "numberOfElements": 5,        "first": true,        "last": true,        "empty": false    },    "code": 200,    "msg": null}

    说明:

    • totalPages:总页数

    • totalElements:总记录数

    模糊查询

    Controller实现

       @GetMapping("/findByTilteLike")    public Result findByTilteLike(@RequestParam String key) {        List<Product> products = esProductRepository.findByTilteLike(key);        return Result.success(products);    }

    说明:模糊查询通过findByxxlike

    范围查询

    范围查询通常是指>、< >= <=等

    Controller实现

      @GetMapping("/findByPriceGreaterThanEqual")    public Result findByPriceGreaterThanEqual(@RequestParam Double price) {        List<Product> products = esProductRepository.findByPriceGreaterThanEqual(price);        return Result.success(products);    }

    说明:范围查询通过findByxxGreaterThanEqual

    • 大于:GreaterThan

    • 大于等于:GreaterThanEqual

    • 小于:LessThan

    • 小于等于:LessThanEqual

    关于“Spring Boot如何集成Elasticsearch模块实现简单查询功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: Spring Boot如何集成Elasticsearch模块实现简单查询功能

    本文链接: https://lsjlt.com/news/340802.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Spring Boot 集成Elasticsearch模块实现简单查询功能
      目录背景系统集成引入jar包application.yml文件中添加ES配置创建文档实体接口实现具体实现基础查询新增文档请求参数Controller实现返回结果修改文档通过id查询文...
      99+
      2024-04-02
    • Spring Boot如何集成Elasticsearch模块实现简单查询功能
      这篇文章主要介绍“Spring Boot如何集成Elasticsearch模块实现简单查询功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Boot如何集成Elas...
      99+
      2023-07-02
    • Spring Boot简单实现文件上传功能
      目录前言后端处理物理路径和虚拟路径映射前言 前端处理 通过form表单来上传文件提交方式为postenctype格式为"multipart/form-data"i...
      99+
      2024-04-02
    • Spring Boot集成JavaMailSender发送邮件功能的实现
      目录前言集成步骤添加依赖邮件配置信息邮件配置类代码实现发送简单邮件邮件实体类业务实现类测试类扩展功能发送Html内容的邮件业务实现类测试类发送带附件邮件业务实现类测试类发送模板邮件添...
      99+
      2024-04-02
    • Spring boot security权限管理集成cas单点登录功能的实现
      目录1.Spring boot集成Spring security2.部署CAS server3.配置CAS client挣扎了两周,Spring security的cas终于搞出来了...
      99+
      2024-04-02
    • php怎么实现简单的查询功能
      要实现简单的查询功能,可以使用PHP和MySQL数据库进行操作。以下是一个简单的例子:1. 首先,连接到MySQL数据库:```ph...
      99+
      2023-09-07
      php
    • Python实现的简单dns查询功能示例
      本文实例讲述了Python实现的简单dns查询功能。分享给大家供大家参考,具体如下: #!/usr/bin/python import sys,socket def print_array(*arr):...
      99+
      2022-06-04
      示例 查询功能 简单
    • 利用Spring Boot框架如何实现跨域与自定义查询功能
      利用Spring Boot框架如何实现跨域与自定义查询功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。跨域请求定义:当我们从本身站点请求不同域名或端口的服务所提供的资源时...
      99+
      2023-05-31
      springboot 自定义查询 跨域
    • Spring boot如何搭建web应用集成thymeleaf模板实现登陆
      这篇文章将为大家详细讲解有关Spring boot如何搭建web应用集成thymeleaf模板实现登陆,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spring boot 搭建web应用集成了thymel...
      99+
      2023-05-30
      springboot web thymeleaf
    • vue+spring boot如何实现校验码功能
      这篇文章将为大家详细讲解有关vue+spring boot如何实现校验码功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用vue写了一个校验码来玩玩,样子如下:img标签<img &nb...
      99+
      2023-06-15
    • 使用Spring boot如何实现对Mybatis进行集成
      使用Spring boot如何实现对Mybatis进行集成?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。本章目标整合 Mybatis ,并集成 Druid 数据...
      99+
      2023-05-31
      springboot mybatis
    • spring-boot集成spring-security的oauth2如何实现github登录网站
      这篇文章主要为大家展示了“spring-boot集成spring-security的oauth2如何实现github登录网站”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring-boot集...
      99+
      2023-05-30
      spring boot oauth2.0
    • js如何实现简单购物车模块
      这篇文章主要介绍js如何实现简单购物车模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下主要功能输入框正则判断,两位数小数,开头可以为0如果商品名字相同,自动数量+1,如果名字相同,价格不同,以最新价格为...
      99+
      2023-06-14
    • 在Spring Boot 中使用Spring security 如何实现对CAS进行集成
      今天就跟大家聊聊有关在Spring Boot 中使用Spring security 如何实现对CAS进行集成,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.创建工程创建Maven工...
      99+
      2023-05-31
      spring security cas
    • 使用Spring Boot如何实现对Dubbo框架进行集成
      这期内容当中小编将会给大家带来有关使用Spring Boot如何实现对Dubbo框架进行集成,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.创建工程在pom.xml中加入依赖创建工程名为:(1)spri...
      99+
      2023-05-31
      springboot dubbo
    • Spring Boot 如何实现自然语言处理功能?
      自然语言处理(Natural Language Processing,简称NLP)是一种使计算机能够理解、解释和生成自然语言的技术。它可以使计算机像人类一样处理和理解语言,从而帮助我们更好地处理文本数据,如搜索引擎、智能客服、情感分析等。...
      99+
      2023-10-10
      自然语言处理 linux spring
    • PowerShell如何实现简单的grep功能
      这篇文章将为大家详细讲解有关PowerShell如何实现简单的grep功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在PowerShell中,无法像*nix中一样使用grep命令,直接对一个目录下的所...
      99+
      2023-06-09
    • Vue如何实现简单搜索功能
      这篇文章主要讲解了“Vue如何实现简单搜索功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue如何实现简单搜索功能”吧!1、概述在vue项目中,搜索功能是我们经常需要使用的一个场景,最常...
      99+
      2023-07-05
    • 如何使用MySQL和Ruby实现一个简单的数据查询分析功能
      要使用MySQL和Ruby实现一个简单的数据查询分析功能,首先需要确保已经安装了MySQL数据库和Ruby编程语言。下面是一个简单的...
      99+
      2023-10-10
      MySQL
    • 如何使用MySQL和Java实现一个简单的地理位置查询功能
      如何使用MySQL和Java实现一个简单的地理位置查询功能概述:地理位置查询功能可以让用户根据指定的经纬度查找附近的地点或者查询特定地点的经纬度信息。在本文中,我们将讨论如何使用MySQL和Java实现一个简单的地理位置查询功能,并提供具体...
      99+
      2023-10-22
      MySQL Java 地理位置查询
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作