【SpringBoot笔记26】SpringBoot框架集成ElasticSearch数据库

news2024/11/24 12:59:04

这篇文章,主要介绍SpringBoot框架如何集成ElasticSearch数据库。

目录

一、SpringBoot集成ES

1.1、ElasticSearch介绍

1.2、引入ES依赖

1.3、实例化ES对象

1.4、创建测试控制器


一、SpringBoot集成ES

1.1、ElasticSearch介绍

ElasticSearch是一款分布式,基于Restful风格的文档搜索引擎,ES是一款非结构化的文档型数据库,它可以实现海量数据的快速搜索和分析。elasticsearch提供了多种语言的支持,例如:Java、C、Python等等,不同的编程语言要操作ES数据库,那就需要使用不同的编程语言实现一个ES客户端程序,然后通过ES数据库提供的Restful风格的API操作数据库。

ES官方提供了两种Java语言实现的客户端,分别如下所示:

  • elasticsearch-rest-client低级客户端:这个客户端实现的功能相当简单,只是提供了ES的一些基本操作。
  • elasticsearch-rest-high-level-client高级客户端:高级客户端是基于低级客户端实现的,提供了更加多的功能(实际开发里面也是采用这种客户端比较多)。

下面具体介绍下,SpringBoot框架如何集成ES数据库。

注意:这篇文章采用的ES数据库版本是【7.13.0】,不同版本的数据库,可能会存在不同的差别。

  • ES版本是【5.x】之前,是有type类型的概念,一个Index下面可以有多个type类型。
  • ES版本是【6.x】时候,规定一个index类型只能够有一个type类型。
  • ES版本从【7.x】开始,就已经剔除了type的概念,所以index索引下就是doc文档。

下载地址【Elasticsearch 7.13.0 | Elastic】。

1.2、引入ES依赖

  • 如果是使用低级客户端,那就只需要引入【elasticsearch-rest-client】依赖即可。
<!-- 引入 es 低级客户端 rest-client -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
</dependency>
  • 如果是使用高级客户端,那就需要引入下面几个依赖。
    • ​​​​​​​【elasticsearch-rest-client】依赖。
    • 【elasticsearch】依赖。
    • elasticsearch-rest-high-level-client依赖。
<!-- 引入 es 低级客户端 rest-client -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-client</artifactId>
</dependency>
<!-- 引入 elasticsearch 依赖 -->
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
</dependency>
<!-- 引入 rest-high-level-client 高级客户端依赖 -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

高级客户端需要引入的依赖:【Dependencies | Java REST Client [7.17] | Elastic】。

注意:引入ES高级客户端,是基于elasticsearch项目开发,并且使用了elasticsearch-rest-client低级客户端,所以需要引入上面三个依赖。

1.3、实例化ES对象

实例化ES对象,就是需要在SpringBoot应用程序启动的时候,注入一个客户端对象存入IOC容器,之后使用的时候,只需要自动装配就可以使用了。

实例化官方步骤:Initialization | Java REST Client [7.17] | Elastic。

package com.spring.boot.demo.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author ZhuYouBin
 * @version 1.0.0
 * @Date: 2022/11/19 22:14
 * @Description ES客户端配置类
 */
@Configuration
public class RestClientConfig {

    @Bean(name = "highRestClient")
    public RestHighLevelClient restHighLevelClient() {
        // 1、创建IP地址对象: 这里就是写ES数据库的IP地址信息,如果有多个ES结点,那就可以写多个IP地址
        // ES数据库,默认是9200端口
        HttpHost httpHost = new HttpHost("localhost", 9200, "http");
        // 2、创建低级客户端对象:
        RestClientBuilder builder = RestClient.builder(httpHost);
        // 3、创建 RestHighLevelClient 对象
        return new RestHighLevelClient(builder);
    }

}

HighRestClient高级客户端,内部会创建一个RestClient低级客户端对象来执行ES请求,RestClient内部会维护一个连接池,并且开启一些线程去执行ES请求,所以,当我们不再使用ES的时候,需要手动调用close()方法关闭这些线程。

1.4、创建测试控制器

package com.spring.boot.demo.controller;

import org.elasticsearch.client.IndicesClient;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

/**
 * @author ZhuYouBin
 * @version 1.0.0
 * @Date: 2022/11/19 22:24
 * @Description ES 测试类
 */
@RestController
@RequestMapping("/api/es")
public class TestController {

    @Autowired
    private RestHighLevelClient highRestClient;

    @GetMapping("/createIndex")
    public String createIndex() throws IOException {
        // 创建索引请求对象
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("idx_name_2022");
        // 获取索引客户端
        IndicesClient indicesClient = highRestClient.indices();
        // 执行创建索引的请求
        CreateIndexResponse response = indicesClient.create(createIndexRequest, RequestOptions.DEFAULT);
        // 获取响应信息
        String index = response.index();
        System.out.println("索引名称: " + index);
        // 索引是否创建成功
        boolean acknowledged = response.isAcknowledged();
        System.out.println("索引是否创建成功: " + acknowledged);
        return "success.";
    }

}

启动工程,浏览器访问【http://localhost:8080/api/es/createIndex】,结果如下所示:

到此,SpringBoot集成ElasticSearch就成功啦。

综上,这篇文章结束了,主要介绍SpringBoot框架如何集成ElasticSearch数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]java毕业设计网上购物商城系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Allegro只给孔或pin加背钻属性操作指导

Allegro只给孔或pin加背钻属性操作指导 Allegro支持只给孔加背钻属性,除了孔,pin也是可以的,具体操作步骤如下 选择Edit-Property命令 Find选择Net 选择需要背钻的网络添加背钻属性,点击OK 设置下背钻参数 选择背钻种类,top钻选择top,bottom钻选择bottom 把需要背钻…

科研笔记—Ergodic Rate Analysis of STAR-RIS Aided NOMA Systems

Ergodic Rate Analysis of STAR-RIS Aided NOMA Systems 1 STAR-RIS2 摘要3 系统模型3.1 信道3.2 用户位置3.3 ES&#xff08;Energy Splitting&#xff09;能量分裂协议3.4 NOMA3.5 信道模型3.6 信干噪比4 仿真4.1 遍历率分析星型智能反射面辅助NOMA系统的遍历率分析 原文链接…

Day08--初步创建并使用自定义组件

提纲挈领&#xff1a; 1.如何创建自定义组件&#xff1f; 我的操作&#xff1a; ************************************************* ************************************************* ************************************************* *****************************…

Netty:入门(2)

相关文章&#xff1a; 《IO 模型与多路复用》 《Java NIO》 《Netty&#xff1a;入门&#xff08;1&#xff09;》 写在开头&#xff1a;本文为学习后的总结&#xff0c;可能有不到位的地方&#xff0c;错误的地方&#xff0c;欢迎各位指正。 前言 在前文中&#xff0c;我们…

Spring 中 Bean 对象的存储和取出

由于 Spring 拥有对象的管理权&#xff0c;所以我们也需要拥有较为高效的对象存储和取出的手段&#xff0c;下面我们来分别总结一下&#xff1a; 存对象 配置文件 在存储对象之前&#xff0c;我们需要先配置一下 Spring 的扫描目录&#xff0c;这样 Spring 即可在正确的目录…

JVM复习【面试】

JVM复习【面试】前言推荐复习【JVM】第一部分 走进Java第1章 走进Java /2第二部分 自动内存管理机制第2章 Java内存区域与内存溢出异常 /382.2 运行时数据区 /382.2.2 Java虚拟机栈 /392.3 HotSpot虚拟机对象探秘2.3.1 对象的创建 /442.3.2 对象的内存布局 /472.4 实战&#xf…

HTML-Demo:工商银行电子汇款单

HTML-Demo&#xff1a;工商银行电子汇款单 Date: November 20, 2022 Demo简介&#xff1a; 简要说明一下这个demo 用HTML完成以下表格 知识点简介&#xff1a; 简要介绍其中一些知识点 表格属性 cellspacing 与 cellpadding 功能&#xff1a; cellpadding和cellspacing属性控…

面试:java中的各种锁对比

共享锁 共享锁有CountDownLatch, CyclicBarrier, Semaphore, ReentrantReadWriteLock等 ReadWriteLock&#xff0c;顾名思义&#xff0c;是读写锁。它维护了一对相关的锁 — — “读取锁”和“写入锁”&#xff0c;一个用于读取操作&#xff0c;另一个用于写入操作。“读取锁…

D. Make It Round(贪心 贡献 数学)[Codeforces Round #834 (Div. 3)]

题目如下&#xff1a; 思路 or 题解&#xff1a; 我们先考虑如何操作使结尾有最多的 0 我们不难发现&#xff1a; 2 * 5 10 10 10 我们是否只需要考虑 2 与 5 的贡献就行了 答案是肯定的&#xff01;&#xff01;&#xff01; 约定&#xff1a; cnt5因数5的个数cnt_5 因数 …

kubernetes集群安装Ingress-nginx

文章目录概述搭建环境版本对应关系yaml文件安装实操演示常见问题外链地址概述 Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。 Kubernetes 通过 kube-proxy 服务实现了 Service 的对外发布及负载均衡&#xff0c;它的各…

2.3、传输方式

2.3、传输方式 2.3.1、串行&并行 2.3.3.1、串行传输 串行传输是指数据是一个比特一个比特依次发送的。因此&#xff0c;在发送端与接收端之间只需要一条数据传输线路即可 2.3.3.2、并行传输 一次发送 nnn 个比特。为此&#xff0c;在发送端和接收端之间需要有 nnn 条传输…

解决vscode各种异常格式化编译器配置

在vscode中创建vue文件时&#xff0c;若编辑代码时会出现间隔一段时间后自动的格式化内容&#xff0c;会很烦&#xff0c;经反复改查后无果&#xff0c;后来&#xff0c;对编辑器进行全面配置 首先原setting.json文件中的代码是这样的 { "files.autoSave": &qu…

定压补水装置 隔膜式定压补水装置

循环水中气体的来源及危害 A、气体来源 1、补水中夹带气体。 2、在定压不稳时吸入的气体。 3、放水时气体的侵入。 4、管道阀门等设备跑冒滴漏时侵入。 B、气体存在的危害 1、容易形成气阻&#xff0c;增加运营成本。 水中气体不及时排除&#xff0c;它所形成空气袋或气柱&am…

Vue学习(九)——混入

前言 混入&#xff08;mixin&#xff09;的使用非常简单&#xff0c;其实我原本打算直接写插件&#xff08;plugin&#xff09;的&#xff0c;但考虑到插件的使用范围也包括混入和自定义指令&#xff0c;还是先讲讲这两个的基本概念。 混入在我看来&#xff0c;就是给组件加上…

maya 卡通草地制作方法笔记

maya 卡通草地制作方法笔记 一、概述 maya制作草地的方法很多&#xff0c;有粒子替代种子法&#xff0c;painter笔刷法&#xff0c;xgen毛发模拟法&#xff0c;也有直接批量大量代理物体复制法等等。这次讨论的是用maya的painter笔刷法&#xff0c;审核制作卡通类简单的草地效…

Linux 进程概念 —— 冯 • 诺依曼体系结构

文章目录1. 冯诺依曼体系结构&#x1f351; 输入、输出设备&#x1f351; 中央处理器&#x1f351; 内存&#x1f351; 总线&#x1f351; 局部性原理&#x1f351; 总结2. 数据的流动过程1. 冯诺依曼体系结构 在 1945 年冯诺依曼和其他计算机科学家们提出了计算机具体实现的报…

URL和URI的区别

文章目录URLSchemeAuthorityPath to resourceParametersAnchorURL和URI参考URL 以下是 URL 的一些示例&#xff1a; https://developer.mozilla.org https://developer.mozilla.org/en-US/docs/Learn/ https://developer.mozilla.org/en-US/search?qURL这些 URL 中的任何一个…

[附源码]java毕业设计水库水面漂浮物WEB系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

攻防世界Check

Check 题目描述&#xff1a;套娃&#xff1f; 题目环境&#xff1a;https://download.csdn.net/download/m0_59188912/87097474 将图片放入winhex中打开&#xff0c;文件头与文件尾均正常&#xff0c;文件大小也正常。 判断为lsb隐写&#xff0c;查看三个颜色的plane 0通道&…