SpringBoot——整合ElasticSearch实现对es文档的基本操作

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: SpringBoot——整合ElasticSearch实现对es文档的基本操作

文章目录

一、创建springboot项目

二、导入es依赖坐标

三、创建实体类

四、创建dao层

五、添加配置类

六、测试


一、创建springboot项目


这里不做演示


二、导入es依赖坐标


        <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>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

三、创建实体类


package com.example.springboot_es.user;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
/**
 * @Author: Ljx
 * @Date: 2021/12/3 13:14
 * @role:
 */
//indexName 指定索引名称
@Document(indexName = "lx-sd")
@Data
public class Article {
    @Id
    @Field(index = false,type = FieldType.Integer)
    private Integer id;
    /**
     * index:是否设置分词  默认为true
     * analyzer:储存时使用的分词器
     * searchAnalyze:搜索时使用的分词器
     * store:是否存储  默认为false
     * type:数据类型  默认值是FieldType.Auto
     *
     */
    @Field(analyzer = "ik_smart",searchAnalyzer = "ik_smart",store = true,type = FieldType.Text)
    private String title;
    @Field(analyzer = "ik_smart",searchAnalyzer = "ik_smart",store = true,type = FieldType.Text)
    private String context;
    @Field(store = true,type = FieldType.Integer)
    private Integer hits;
}

四、创建dao层


package com.example.springboot_es.dao;
import com.example.springboot_es.user.Article;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * @Author: Ljx
 * @Date: 2021/12/3 13:29
 * @role:
 */
/**
 * 自定义接口需要继承ElasticsearchRepository<实体类型,主键类型>  基本的crud 分页
 */
@Component
public interface ArticleDao extends ElasticsearchRepository<Article,Integer> {
    /**
     * 根据标题查询
     * @param title
     * @return
     */
    List<Article> findByTitle(String title);
    /**
     * 根据标题或内容查询
     * @param title
     * @param context
     * @return
     */
    List<Article> findByTitleOrContext(String title,String context);
    /**
     * 根据标题或内容查询(含分页)
     * @param title
     * @param context
     * @param pageable
     * @return
     */
    List<Article> findByTitleOrContext(String title, String context, Pageable pageable);
}

五、添加配置类


spring:
  elasticsearch:
    rest:
      uris: localhost:9200
      read-timeout: 30s
      connection-timeout: 5s

六、测试


package com.example.springboot_es;
import com.example.springboot_es.dao.ArticleDao;
import com.example.springboot_es.user.Article;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import java.util.List;
import java.util.Optional;
@SpringBootTest
public class Estest {
    @Autowired
    private ElasticsearchRestTemplate template;
    @Autowired
    private ArticleDao articleDao;
    //通过springboot es向elasticsearch数据库储存一条数据
    @Test
    public void testSave() {
        //创建文档
        Article article = new Article();
        article.setId(1);
        article.setTitle("es搜索");
        article.setContext("成功了吗");
        //保存文档
        articleDao.save(article);
    }
    //修改
    @Test
    public void testUpdate() {
        //判断数据库中是否有你指定的id的文档,如果没有。就进行保存,如果有,就进行更新
        //创建文档
        Article article = new Article();
        article.setId(1);
        article.setTitle("es搜索1");
        article.setContext("成功了吗1");
        //保存文档
        articleDao.save(article);
    }
    //删除
    @Test
    public void testDelete() {
//        根据主键删除
        articleDao.deleteById(1);
    }
    //重新构建数据
    @Test
    public void makeData(){
        for (int i = 1; i <= 10; i++) {
            //创建文档
            Article article = new Article();
            article.setId(i);
            article.setTitle("es搜索"+i);
            article.setContext("成功了吗"+i);
            article.setHits(100+i);
            //保存数据
            articleDao.save(article);
        }
    }
    //查询所有
    @Test
    public void findAll(){
        Iterable<Article> all = articleDao.findAll();
        for (Article article : all) {
            System.out.println(article);
        }
    }
    //主键查询
    @Test
    public void testFindById(){
        Optional<Article> id = articleDao.findById(1);
        System.out.println(id.get());
    }
    //分页查询
    @Test
    public void testFindAllWithPage(){
        //设置分页条件
        //page代表页码,从0开始
        PageRequest pageRequest = PageRequest.of(1, 3);
        Page<Article> all = articleDao.findAll(pageRequest);
        for (Article article : all) {
            System.out.println(article);
        }
    }
    //排序查询
    @Test
    public void testFindWithSort(){
        //设置排序条件
        Sort sort = Sort.by(Sort.Order.desc("hits"));
        Iterable<Article> all = articleDao.findAll(sort);
        for (Article article : all) {
            System.out.println(article);
        }
    }
    //分页加排序查询
    @Test
    public void testFindAllWithPageAndSort(){
        //设置排序条件
        Sort sort = Sort.by(Sort.Order.desc("hits"));
        //设置分页条件
        PageRequest pageable = PageRequest.of(1, 3, sort);
        Page<Article> page = articleDao.findAll(pageable);
        for (Article article : page.getContent()) {
            System.out.println(article);
        }
    }
    //根据标题查询
    @Test
    public void testFindByTitle(){
        List<Article> es = articleDao.findByTitle("es");
        for (Article e : es) {
            System.out.println(e);
        }
    }
    //根据标题或内容查询
    @Test
    public void testFindByTitleOrContext(){
        List<Article> es = articleDao.findByTitleOrContext("es", "1");
        for (Article e : es) {
            System.out.println(e);
        }
    }
    //根据标题和内容查询(含分页)
    @Test
    public void testFindByTitleOrContextWithPage(){
        //设置排序条件
        Sort sort = Sort.by(Sort.Order.desc("hits"));
        //设置分页条件
        PageRequest pageRequest = PageRequest.of(1, 3, sort);
        List<Article> es = articleDao.findByTitleOrContext("es", "1", pageRequest);
        for (Article e : es) {
            System.out.println(e);
        }
    }
}


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
存储 JSON Java
221 0
|
5月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
2141 0
|
10月前
|
存储 缓存 监控
极致 ElasticSearch 调优,让你的ES 狂飙100倍!
尼恩分享了一篇关于提升Elasticsearch集群的整体性能和稳定性措施的文章。他从硬件、系统、JVM、集群、索引和查询等多个层面对ES的性能优化进行分析,帮助读者提升技术水平。
|
11月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
161 1
|
12月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
728 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
12月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
327 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
21天前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
129 4
基于springboot+vue开发的会议预约管理系统
|
2月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
101 0
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
5月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
470 1
|
5月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
483 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发