【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接

这篇具有很好参考价值的文章主要介绍了【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

更多有关博主写的往期Elasticsearch文章

标题 地址
【ElasticSearch 集群】Linux安装ElasticSearch集群(图文解说详细版) https://masiyi.blog.csdn.net/article/details/131109454
基于SpringBoot+ElasticSearch 的Java底层框架的实现 https://masiyi.blog.csdn.net/article/details/121534307
ElasticSearch对标Mysql,谁能拔得头筹? https://masiyi.blog.csdn.net/article/details/122661822
同事说关键字查询用Mysql,我上去就是一个高压锅,用ElasticSearch不香吗? https://masiyi.blog.csdn.net/article/details/122701654
新年第一天,老板让升级ElasticSearch版本,我说得加钱 https://masiyi.blog.csdn.net/article/details/122819455
使用了ElasticSearch之后,公司系统查询速度快了50倍,工资直接翻一倍 https://masiyi.blog.csdn.net/article/details/122819455
ElasticSearch实战教程PostMan版(超级详细版) https://masiyi.blog.csdn.net/article/details/123048119
Linux安装ElasticSearch以及Ik分词器(图文解说详细版) https://masiyi.blog.csdn.net/article/details/121509681

导语

发现很多公司都是自己导入原生的jar包自己去封装一套Elasticsearch的框架,这样虽然可以自定义业务,但是需要花费很多的时间,其实spring官方有一套springboot的starter,帮助大家快速入手官网的starter,这篇博客也会介绍使用该starter连接Elasticsearch的集群。该starter有点像mybatisplus+Jpa,如果熟悉这两个框架的同学应该很快就会上手。

官网地址:
https://docs.spring.io/spring-data/elasticsearch/docs/4.0.x/reference/html/#preface

本文所有的代码都已经提交到git仓库中,仓库地址:
https://gitee.com/WangFuGui-Ma/spring-boot-elasticSearch

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring

现在我们开始按照步骤进行spring-boot-starter-data-elasticsearch的使用,本文中使用的spring boot版本为2.7.x 对于的elasticsearch客户端版本为7.17.x

🐝第一步,创建一个springboot项目

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring

🐝第二步,导入spring-boot-starter-data-elasticsearch依赖

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

其他依赖

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

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--json-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.76</version>
		</dependency>
		<!--json-->

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring

🐝第三步,配置yml文件

spring:
  elasticsearch:
    uris:
      - 192.168.75.128:9200
      - 192.168.75.129:9200
      - 192.168.75.130:9200
server:
  port: 8889

uris这里填的是集群的地址,如果你的es是单机版的,直接填一个就行了

🐝第四步,编写es索引对应的实体类

import lombok.Data;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.WriteTypeHint;

/**
 * @Author masiyi
 * @Date 2023/6/14 13:46
 * @PackageName:com.masiyi.springbootstarterdataelasticsearch.doman
 * @ClassName: ElasticTest
 * @Description: TODO
 * @Version 1.0
 */
@Data
@Document(indexName = "elastic_test",writeTypeHint = WriteTypeHint.FALSE)
public class ElasticTest {

    private Long id;

    private String name;

    private Integer age;

    private Boolean isMan;
}

注:

  • id这个类型一定要写,否则会报错
  • indexName对应es中的索引
  • writeTypeHint如果为false则不会自动创建索引

🐝第五步,编写实体类对应的mapper

类似mybatis一样,我们需要创建对应的mapper

public interface ElasticTestMapper extends ElasticsearchRepository<ElasticTest,Long> {

}

继承ElasticsearchRepository类,第一个泛型添es对应的实体类,第二个泛型添id的类型

🐝第六步,使用框架自带的增删改查

我们这次用单元测试的方法跟大家演示框架的用法

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring

注入刚刚创建的mapper和框架的ElasticsearchRestTemplate

🐝增

🐝使用ElasticsearchRestTemplate
   @Test
    void save() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setName("李四");
        elasticTest.setAge(23);
        elasticTest.setIsMan(true);
        elasticsearchTemplate.save(elasticTest);
    }
🐝使用mapper
    @Test
    void insert() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setName("李四");
        elasticTest.setAge(23);
        elasticTest.setIsMan(true);
        elasticTestMapper.save(elasticTest);
    }
🐝设置指定的id
   @Test
    void insertId() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setName("掉头发的王富贵");
        elasticTest.setAge(25);
        elasticTest.setIsMan(true);
        elasticTest.setId(2434235L);
        elasticTestMapper.save(elasticTest);
    }
🐝批量保存
    @Test
    void saveAll() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setName("李四");
        elasticTest.setAge(24);
        elasticTest.setIsMan(true);
        elasticTestMapper.saveAll(Arrays.asList(elasticTest));
    }

🐝删

🐝传入实体类删
    @Test
    void delete() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setId(2342342L);
        elasticTestMapper.delete(elasticTest);
    }
🐝传入id删
    @Test
    void deleteById() {
        elasticTestMapper.deleteById(2342342L);
    }
🐝删除索引里面所有的数据(慎用)
    @Test
    void deleteAll() {
        elasticTestMapper.deleteAll();
    }

🐝改

🐝实体改
    @Test
    void update() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setName("掉头发的王富贵hh");
        elasticTest.setId(2434235L);
        elasticTestMapper.save(elasticTest);
    }

这里改会把其他的不在实体里面为null的数据清空

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring

🐝实体改全部
 @Test
    void updateAll() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setName("掉头发的王富贵");
        elasticTest.setAge(24);
        elasticTest.setIsMan(true);
        elasticTest.setId(2434234L);
        elasticTestMapper.save(elasticTest);
    }

如果我们只需要局部更新,可以使用下面的两种方法

🐝先查再update
    @Test
    void updateNow() {
        ElasticTest elasticTest = elasticTestMapper.findById(2434234L).get();
        elasticTest.setName("不掉头发的王富贵");
        elasticTestMapper.save(elasticTest);
    }

但是这个方法会消耗性能,所以推荐用下面的方法

🐝直接使用局部更新
    @Test
    void updateNow2() {
        ElasticTest elasticTest = new ElasticTest();
        elasticTest.setName("掉头发的王富贵h");
        Map map = JSONObject.parseObject(JSONObject.toJSONString(elasticTest), Map.class);
        UpdateQuery updateQuery = UpdateQuery.builder("0ZUv7okBcQy9f7u_tXkH").withDocument(Document.from(map)).build();
        elasticsearchTemplate.update(updateQuery, IndexCoordinates.of("elastic_test"));
    }

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring

🐝查

🐝根据id查
    @Test
    void select() {
        Optional<ElasticTest> byId = elasticTestMapper.findById(2434234L);
        byId.ifPresent(System.out::println);
    }
🐝根据id列表查
  @Test
    void findAllById() {
        Iterable<ElasticTest> allById = elasticTestMapper.findAllById(Arrays.asList(2434234L));
        allById.forEach(System.out::println);
    }
🐝查询全部数据
    @Test
    void findAll() {
        Iterable<ElasticTest> allById = elasticTestMapper.findAll();
        allById.forEach(System.out::println);
    }
🐝排序查-正序
    @Test
    void findAllSort() {
        Sort age = Sort.by("age").ascending();
        Iterable<ElasticTest> all = elasticTestMapper.findAll(age);
        all.forEach(System.out::println);
    }

🐝排序查-倒序
    @Test
    void findAllSortDE() {
        Sort age = Sort.by("age").descending();
        Iterable<ElasticTest> all = elasticTestMapper.findAll(age);
        all.forEach(System.out::println);
    }
🐝分页查
    @Test
    void findAllPage() {
        PageRequest pageRequest = PageRequest.of(0, 10);
        Page<ElasticTest> all = elasticTestMapper.findAll(pageRequest);
        all.forEach(System.out::println);
        System.out.println(JSON.toJSONString(all));
    }

🐝自定义复杂的查询
 @Test
    void findMyStyle() {
        TermQueryBuilder termQueryBuilder = new TermQueryBuilder("name.keyword", "掉头发的王富贵");
        NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(termQueryBuilder);

        SearchHits<ElasticTest> search = elasticsearchTemplate.search(nativeSearchQuery, ElasticTest.class);
        List<SearchHit<ElasticTest>> hitList = search.getSearchHits();
        for (SearchHit<ElasticTest> hit : hitList) {
            ElasticTest entity = hit.getContent(); // 获取实体对象
            System.out.println(entity);
            String index = hit.getIndex(); // 获取索引名
            System.out.println(index);

        }
    }

🐝第七步,使用JPA风格的查询方式

如果会用jpa的同学看到这个可能会非常得熟悉

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring
可以自定义查询方法find...

🐝根据age查询
    ElasticTest findByAge(Integer age);
🐝查询所有符合age的数据
    List<ElasticTest> findAllByAge(Integer age);
🐝查询最top的数据
    ElasticTest findTopByAge(Integer age);

如果你使用的是idea这种高级的编辑器,你在mapper写方法的时候会自动提示你。

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring

通过本文的学习,我们探索了在Spring Boot应用中使用Elasticsearch的方法以及如何连接到Elasticsearch集群。Elasticsearch作为一款强大的搜索和分析引擎,在现代应用开发中扮演着至关重要的角色。借助于Spring Boot和spring-boot-starter-data-elasticsearch,我们能够以更加便捷的方式将Elasticsearch集成到我们的项目中,实现高效的数据搜索与分析。

通过配置简单明了的属性,我们能够快速地将Spring Boot应用连接到Elasticsearch集群,实现数据的索引、搜索和分析。借助于Spring Data Elasticsearch提供的强大功能,我们能够轻松地定义实体类、进行CRUD操作,并且利用Elasticsearch的全文搜索和分词等特性,让我们的应用具备更高效的查询和检索能力。

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接,ElasticSearch,springboot,elasticsearch,java,spring boot,spring文章来源地址https://www.toymoban.com/news/detail-665615.html

到了这里,关于【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Jpa与Druid线程池及Spring Boot整合(二): spring-boot-starter-data-jpa 踏坑异常处理方案

                         docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升维: 道、法、

    2024年02月13日
    浏览(60)
  • Spring Boot Starter Data Redis使用Lettuce客户端报错:NOAUTH Authentication required

    Spring Boot版本升级为:2.6.14 redis依赖: redis配置不变,还是带password的: 项目启动后,获取redis连接时,报错:NOAUTH Authentication required spring-boot-starer-data-redis支持使用Jedis和Lettuce作为redis客户端,如果配置不指定则默认使用Lettuce。 不管是Lettuce还是还是Jedis,核心是构建RedisCo

    2024年01月25日
    浏览(49)
  • Spring Boot中使用Spring Data Elasticsearch访问Elasticsearch

    Elasticsearch是一个分布式的全文搜索和分析引擎,它可以将海量数据进行快速的查询和聚合。Spring Data Elasticsearch是Spring Data家族中的一个成员,它提供了与Elasticsearch的集成,可以方便地使用Spring框架来访问Elasticsearch。 在本文中,我们将会介绍如何在Spring Boot中使用Spring Data

    2024年02月08日
    浏览(48)
  • spring boot 项目中搭建 ElasticSearch 中间件 一 spring data 操作 es

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 本文是进行ElasticSearch 的环境准备和基础操作(使用postman),并且已经能够使用java api操作

    2024年02月10日
    浏览(44)
  • Spring Boot - spring-boot-starter

    spring-boot-starter 当学习Spring Boot时,可以通过一个完整的案例来理解和实践其基本概念和功能。以下是一个简单的Spring Boot Starter完整案例,展示了如何创建一个基本的Web应用程序: 首先,创建一个名为pom.xml的Maven项目文件,添加以下内容:idea或其他直接创建直接跳过!

    2024年02月09日
    浏览(51)
  • Spring Boot Starters

    Spring Boot Starters 概述 Spring Boot Starters是一系列为特定应用场景预设的依赖管理和自动配置方案。每个Starter都是为了简化特定类型的项目构建和配置。例如, spring-boot-starter-web 是为创建基于Spring MVC的Web应用程序而设计的。 Starter的结构 一个典型的Starter包含以下部分: pom.xml

    2024年01月25日
    浏览(39)
  • Spring Boot Starter设计实现

    Starter 是 Spring Boot 非常重要的一个硬核功能。 通过 Starter 我们可以快速的引入一个功能或模块,而无须关心模块依赖的其它组件。关于配置,Spring Boot 采用“约定大于配置”的设计理念,Starter 一般都会提供默认配置,只有当我们有特殊需求的时候,才需要在 application.yaml 里

    2024年01月18日
    浏览(48)
  • 自定义Spring Boot Starter

    Spring Boot starter 我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的。在实际项目中一些基础模块其本质就是starter,所以我们需要对Spring Boot的starter有一个全面深入的了解,这是我们的必备知识。 starter介绍 spring boot 在配置

    2024年02月10日
    浏览(83)
  • Spring Boot Starter Parent

    在这,您将学习了解 Spring Boot Starter Parent, 它是 Spring Boot 提供的父级 Pom 文件,旨在提供自动版本依赖管理,帮助我们轻松快速地进行 Spring Boot 开发。 通过 Spring Boot Starter Parent, 我们可以进行简单便捷地包依赖管理。在 Spring Boot 每一个发行版中, 均提供了该版本所兼容的依

    2024年02月08日
    浏览(38)
  • 6. Spring Boot的starters

    6. Spring Boot的starters(重要) 一般认为,SpringBoot 微框架从两个主要层面影响 Spring 社区的开发者们: 基于 Spring 框架的“约定优先于配置(COC)”理念以及最佳实践之路。 提供了针对日常企业应用研发各种场景的 spring-boot-starter 自动配置依赖模块,如此多“开箱即用”的依赖模

    2024年01月24日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包