SpringBoot中整合ElasticSearch实现增删改查等操作

这篇具有很好参考价值的文章主要介绍了SpringBoot中整合ElasticSearch实现增删改查等操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景

SpringBoot中整合ElasticSearch快速入门以及踩坑记录:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135599698

在上面进行集成的基础上,实现对ES数据的增删改查等操作。

注:

博客:
霸道流氓气质-CSDN博客

实现

1、ElastciSearch的对象映射

Spring Data Elasticsearch - Reference Documentation

Spring Data Elasticsearch 对象映射是将 Java 对象(域实体)映射到存储在 Elasticsearch 中的 JSON 表示并返回的过程。

可用注解参考官网明细:

@Document:在类级别应用,以指示此类是映射到数据库的候选项。 最重要的属性是:

indexName:要存储此实体的索引的名称。 这可以包含一个 SpEL 模板表达式,例如"log-#{T(java.time.LocalDate).now().toString()}"

type:映射类型。 如果未设置,则使用类的小写简单名称。(自 4.0 版起已弃用)

shards:索引的分片数。

replicas:索引的副本数。

refreshIntervall:索引的刷新间隔。 用于创建索引。 默认值为“1s”。

indexStoreType:索引的索引存储类型。 用于创建索引。 默认值为“fs”。

createIndex:标记是否在存储库引导时创建索引。 默认值为 true。 请参阅使用相应映射自动创建索引

versionType:版本管理的配置。 默认值为 EXTERNAL。

@Id:在字段级别应用以标记用于标识目的的字段。

@Transient:默认情况下,所有字段在存储或检索文档时都映射到文档,此注释不包括该字段。

@PersistenceConstructor:标记给定的构造函数(甚至是受包保护的构造函数)以在从数据库实例化对象时使用。 构造函数参数按名称映射到检索到的 Document 中的键值。

@Field:应用于字段级别并定义字段的属性,大部分属性映射到相应的 Elasticsearch Mapping 定义(以下列表不完整,请查看注解 Javadoc 以获取完整参考):

name:将在 Elasticsearch 文档中表示的字段名称,如果未设置,则使用 Java 字段名称。

type:字段类型,可以是 Text、Keyword、Long、Integer、Short、Byte、Double、Float、Half_Float、Scaled_Float、Date、Date_Nanos、Boolean、Binary、Integer_Range、Float_Range、Long_Range、Double_Range、Date_Range、Ip_Range、Object、Nested、Ip、TokenCount、Percolator、Flattened、Search_As_You_Type之一。 请参阅 Elasticsearch 映射类型

format以及 Date 类型的定义。pattern

store:标记是否应将原始字段值存储在 Elasticsearch 中,默认值为 false。

analyzer、 ,用于指定自定义分析器和规范化程序。searchAnalyzernormalizer

@GeoPoint:将字段标记为geo_point数据类型。 如果字段是类的实例,则可以省略。GeoPoint

当然也可以自定义转换规则:

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins

按照以上注解说明,新建实体类

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
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;

@Document(indexName="books",createIndex = true)
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ElasticBook {
    @Id
    private Integer id;

    @Field(type = FieldType.Text)
    private String name;

    @Field(type = FieldType.Text)
    private String summary;

    @Field(type = FieldType.Integer)
    private Integer price;
}

这里createIndex 默认就是true,可以不写,代表如果索引不存在则创建。

2、增删改查实现

新建接口Repository,使其继承ElasticsearchRepository

import com.ruoyi.system.domain.study.ElasticBook;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface ElasticSearchRepository extends ElasticsearchRepository<ElasticBook,Integer> {
    List<ElasticBook> findByName(String name);
}

则可以直接使用其自带的各种方法

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins

也可以自定义方法,比如findByName就是根据书名模糊搜索

自定义派生的方法不用实现,只要符合其关键字和规则可自动实现。

这块可参考官网从方法名称创建查询说明:

Spring Data Elasticsearch - Reference Documentation

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins

3、新建Service接口

import java.util.List;

public interface IElasticSearchService {

    void save(ElasticBook book);

    ElasticBook findById(Integer id);

    void update(ElasticBook book);

    void deleteById(Integer id);

    List<ElasticBook> findByName(String name);
}

4、新建service实现

import com.ruoyi.system.repository.ElasticSearchRepository;
import com.ruoyi.system.service.IElasticSearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class ElasticSearchServiceImpl implements IElasticSearchService {

    @Autowired
    private ElasticSearchRepository repository;

    @Override
    public void save(ElasticBook book) {
        repository.save(book);
    }

    @Override
    public ElasticBook findById(Integer id) {
        return repository.findById(id).get();
    }

    @Override
    public void update(ElasticBook book) {
        repository.save(book);
    }

    @Override
    public void deleteById(Integer id) {
        repository.deleteById(id);
    }

    @Override
    public List<ElasticBook> findByName(String name) {
        return repository.findByName(name);
    }
}

5、编写单元测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = RuoYiApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ElasticSearchTest {

    @Autowired
    @Qualifier("elasticsearchClient")
    public RestHighLevelClient highLevelClient;

    @Autowired
    private IElasticSearchService iElasticSearchService;

    @Test
    public void connecTest() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("test");
        CreateIndexResponse response = highLevelClient.indices().create(request, RequestOptions.DEFAULT);
        // 查看是否创建成功
        System.out.println(response.isAcknowledged());
        highLevelClient.close();
    }

    //保存
    @Test
    public void saveTest() throws IOException {
        ElasticBook book = ElasticBook.builder().id(1).name("书名1").summary("霸道的程序猿").price(100).build();
        iElasticSearchService.save(book);
        highLevelClient.close();
        System.out.println("保存成功");
    }

    //根据主键查询
    @Test
    public void findTest() throws IOException {
        ElasticBook book = ElasticBook.builder().id(2).name("书名2").summary("霸道的程序猿").price(80).build();
        iElasticSearchService.save(book);
        ElasticBook book1 = iElasticSearchService.findById(2);
        highLevelClient.close();
        System.out.println("查询成功");
        System.out.println(book1);
    }

    //根据主键更新
    @Test
    public void updateTest() throws IOException {
        ElasticBook book = ElasticBook.builder().id(2).name("书名2更新").summary("霸道的程序猿").price(80).build();
        iElasticSearchService.update(book);
        ElasticBook book1 = iElasticSearchService.findById(2);
        highLevelClient.close();
        System.out.println("更新成功");
        System.out.println(book1);
    }

    //根据主键删除
    @Test
    public void deleteTest() throws IOException {
        iElasticSearchService.deleteById(1);
        highLevelClient.close();
        System.out.println("删除成功");
    }

    //派生查询
    @Test
    public void findByNameTest() throws IOException {
        List<ElasticBook> bookList = iElasticSearchService.findByName("书名");
        highLevelClient.close();
        System.out.println("查询成功");
        System.out.println(bookList);
    }
}

6、单元测试运行结果

保存结果

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins

根据主键查询结果

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins

更新结果

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins

模糊搜索

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins

7、关于查询与扩展

通过上面简单入门后,关于查询还有计数、排序、分页、条件等高级用法,这里可以在需要用到时再查询官方文档查看

SpringBoot中整合ElasticSearch实现增删改查等操作,SpringBoot,spring boot,elasticsearch,jenkins文章来源地址https://www.toymoban.com/news/detail-802807.html

到了这里,关于SpringBoot中整合ElasticSearch实现增删改查等操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring整合Elasticsearch----其他Elasticsearch操作支持

    本文介绍了对Elasticsearch操作的额外支持,这些操作无法通过存储库接口直接访问。建议将这些操作添加为自定义实现,如“ 自定义存储库实现”中所述。 当使用Spring Data创建Elasticsearch索引时,可以使用@Setting注解定义不同的索引设置。以下参数可用: useServerConfiguration 不发

    2024年04月13日
    浏览(34)
  • Hbase-技术文档-spring-boot整合使用hbase--简单操作增删改查--提供封装高可用的模版类

    使用spring-boot项目来整合使用hbase。 依赖声明表示将把Apache HBase客户端库的2.4.3版本添加到项目中。HBase是一个分布式、可扩展的大数据存储系统,它基于Google的Bigtable模型,并使用了Hadoop分布式文件系统作为底层存储。HBase客户端库是用于与HBase数据库进行交互的工具库,提供

    2024年02月07日
    浏览(34)
  • springboot整合easy-es实现数据的增删改查

    背景 目前公司的一个老项目,查询贼慢,需要想办法提升一下速度,于是就想到了ES,现在尝试一下将ES整合到项目中来提升检索效率。 ES是基于倒排索引实现的,倒排索引中一个表相当于一个索引,表中的每条记录都是一个文档(JSON数据),系统会先对字段数据进行分词,

    2024年01月20日
    浏览(36)
  • 【SpringBoot】整合Elasticsearch 操作索引及文档

    官网操作文档:Elasticsearch Clients | Elastic                踩坑太多了。。。这里表明一下Spring Boot2.4以上版本可能会出现问题,所以我降到了2.2.1.RELEASE。对于现在2023年6月而言,Es版本已经到了8.8,而SpringBoot版本已经到了3.x版本。如果是高版本的Boot在配置类的时候会发现

    2024年02月09日
    浏览(45)
  • 使用ElasticsearchRepository和ElasticsearchRestTemplate操作Elasticsearch,Spring Boot整合Elasticsearch

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Elasticsearch官网参考文档:https://www.elastic.co/guide/index.html Elasticsearch官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch https://docs.spring.io/spring-data/elasticsearch/reference/ 添加依赖 修改yml配置文件 【自定义

    2024年04月22日
    浏览(33)
  • Spring Boot入门(08):整合Mybatis访问MySQL实现增删改查 | 超级详细,建议收藏

            在现代的Web应用程序中,数据库操作是不可避免的。而Spring Boot作为一款快速开发框架,其优秀的集成能力非常适合与数据库交互,而MyBatis则是一个优秀的ORM框架,可以大大简化我们的数据库操作。本文将结合Spring Boot和MyBatis,带您实现高效的MySQL增删改查操作,

    2024年02月12日
    浏览(34)
  • Springboot 整合 Elasticsearch(五):使用RestHighLevelClient操作ES ②

    📁 前情提要: Springboot 整合 Elasticsearch(三):使用RestHighLevelClient操作ES ① 目录  一、Springboot 整合 Elasticsearch 1、RestHighLevelClient API介绍 1.1、全查询 分页 排序 1.2、单条件查询 1.2.1、termQuery 1.2.2、matchQuery 1.2.3、短语检索 1.3、组合查询 1.4、范围查询 1.5、模糊查询 1.6、分组

    2024年04月11日
    浏览(34)
  • Springboot --- 整合spring-data-jpa和spring-data-elasticsearch

    SpringBoot: 整合Ldap. SpringBoot: 整合Spring Data JPA. SpringBoot: 整合Elasticsearch. SpringBoot: 整合spring-data-jpa和spring-data-elasticsearch. SpringBoot: 整合thymeleaf. SpringBoot: 注入第三方jar包. SpringBoot: 整合Redis. SpringBoot: 整合slf4j打印日志. SpringBoot: 整合定时任务,自动执行方法. SpringBoot: 配置多数据源

    2023年04月25日
    浏览(47)
  • SpringBoot———实现增删改查操作

    提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例): 最后在运行项目在postman测试

    2024年02月02日
    浏览(44)
  • 整合vue elementui springboot mybatisplus前后端分离的 简单增加功能 删改查未实现

    涉及知识点 1.springboot项目启动创建  配置yml文件 2.mybatisplus的使用 3.vue的vite文件配置 4.vue springboot 前后端数据交互 1.建立项目的配置文件 src/main/resources/application.yml 2.建立项目 pom.xml 3.建立数据库表 4.建立实体类 cn.webrx.pojo.User 5.建立项目入口程序App cn.webrx.App 6.建立sevices axi

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包