当前位置: 首页 > news >正文

SpringBoot 3整合Elasticsearch 8

这里写自定义目录标题

  • 版本说明
  • spring boot POM依赖
  • application.yml配置
  • 新建模型映射
  • Repository
  • 简单测试
  • 完整项目文件目录结构
  • windows下elasticsearch安装配置

版本说明

官网说明
在这里插入图片描述
本文使用最新的版本

springboot: 3.2.3
spring-data elasticsearch: 5.2.3
elasticsearch: 8.11.4

elasticsearch下载链接:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

最新版可能不兼容,以spring官网为准

spring boot POM依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>demo-es</artifactId><version>0.0.1-SNAPSHOT</version><name>demo-es</name><description>demo-es</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

application.yml配置

使用https必须配置username 和 password

spring:elasticsearch:uris: https://localhost:9200username: elasticpassword: 123456

新建模型映射

package com.example.demoes.es.model;import lombok.AllArgsConstructor;
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;@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "user") // user 是elasticsearch的索引名称(新版本的elasticsearch没有了type的概念)
public class UserModel {  // 每一个UserModel对应一个elasticsearch的文档@Id@Field(name = "id", type = FieldType.Integer)Integer id;// FieldType.Keyword 不可分词@Field(name = "name", type = FieldType.Keyword)String name;// index = false 不建立索引@Field(name = "age", type = FieldType.Integer, index = false)Integer age;// FieldType.Text 可分词,ik_smart,ik_max_word 是ik分词器,对中文分词友好,需要另外安装@Field(name = "address", type = FieldType.Text, searchAnalyzer = "ik_smart", analyzer = "ik_max_word")String address;}

Repository

spring data的repository方便操作,类似jpa的操作
继承ElasticsearchRepository自带一些基础的操作方法

package com.example.demoes.es.repo;import com.example.demoes.es.model.UserModel;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;// UserModel 模型映射   Integer ID的类型
public interface ESUserRepository extends ElasticsearchRepository<UserModel, Integer> {}

简单测试

package com.example.demoes;import com.example.demoes.es.model.UserModel;
import com.example.demoes.es.repo.ESUserRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.*;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.Criteria;
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;@SpringBootTest
class DemoEsApplicationTests {@AutowiredESUserRepository esUserRepository;// 以下三个是 spring-boot-starter-data-elasticsearch 自动配置的 elasticsearch 操作 Bean// 1. DocumentOperations 文档操作@AutowiredDocumentOperations documentOperations;// 2. SearchOperations 查询操作@AutowiredSearchOperations searchOperations;// 3. ElasticsearchOperations elasticsearch 通用的操作,包括DocumentOperations和SearchOperations@AutowiredElasticsearchOperations elasticsearchOperations;@Testvoid contextLoads() {}@Testpublic void testIndex() {// 获取索引操作IndexOperations indexOperations = elasticsearchOperations.indexOps(UserModel.class);// 查看索引映射关系System.out.println(indexOperations.getMapping());// 输出索引名称System.out.println(indexOperations.getIndexCoordinates().getIndexName());}/*** 添加文档*/@Testpublic void testAdd() {esUserRepository.save(new UserModel(1, "张三", 18, "北京朝阳"));esUserRepository.save(new UserModel(2, "李四", 19, "北京朝阳"));esUserRepository.save(new UserModel(3, "王五", 20, "北京朝阳"));esUserRepository.save(new UserModel(4, "赵六", 21, "北京朝阳"));esUserRepository.save(new UserModel(5, "马六", 22, "北京朝阳"));esUserRepository.save(new UserModel(6, "孙七", 23, "北京朝阳"));esUserRepository.save(new UserModel(7, "吴八", 24, "北京朝阳"));esUserRepository.save(new UserModel(8, "郑九", 25, "北京朝阳"));// 查询所有esUserRepository.findAll().forEach(System.out::println);}/*** 更新文档*/@Testpublic void testUpdate() {// 按id更新IndexCoordinates indexCoordinates = elasticsearchOperations.indexOps(UserModel.class).getIndexCoordinates();documentOperations.update(new UserModel(1, "张三", 60, "北京朝阳"), indexCoordinates);}/*** 删除文档*/@Testpublic void testDelete() {documentOperations.delete(String.valueOf(8), UserModel.class);}/*** 查询文档*/@Testpublic void testSearch() {CriteriaQuery query = new CriteriaQuery(new Criteria("id").is(2));SearchHits<UserModel> searchHits = searchOperations.search(query, UserModel.class);for (SearchHit searchHit : searchHits.getSearchHits()){UserModel user = (UserModel) searchHit.getContent();System.out.println(user);}}}

完整项目文件目录结构

在这里插入图片描述

windows下elasticsearch安装配置

直接解压修改配置文件解压目录/config/elasticsearch.yml


# 集群名称
cluster.name: el-cluster
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-1
# 节点名称
node.name: el-node-1#  数据和日志存储路径,默认安装位置path.data: D:/module/elasticsearch-8.11.4/datapath.logs: D:/module/elasticsearch-8.11.4/logs# 访问限制,0.0.0.0代表所有IP都可以访问,localhost也可以
network.host: 0.0.0.0
# 访问端口 默认9200
http.port: 9200# 安全配置,以下的配置第一次启动时自动生成,也可以不配置
#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically      
# generated to configure Elasticsearch security features on 21-03-2024 01:32:15
#
# --------------------------------------------------------------------------------# Enable security features 不使用https时设为false
xpack.security.enabled: truexpack.security.enrollment.enabled: true# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents 不使用https时设为false
xpack.security.http.ssl:enabled: truekeystore.path: certs/http.p12# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:enabled: trueverification_mode: certificatekeystore.path: certs/transport.p12truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["el-node-1"]#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

第一次启动会在控制台打印密码,用户名默认elastic
修改密码的话不要关闭控制台,另外开启一个控制台,进入elastic search安装目录下的bin目录,使用以下命令修改
-i 是交互式的意思,没有的话会随机生成密码,无法自定义。
输入命令回车然后输入两次密码就行了

elasticsearch-reset-password --username elastic -i

使用keytool工具将ca证书导入到jdk。
keytool是jdk自带的工具,使用以下命令

keytool -importcert -cacerts -alias "es_http_ca" -file "elasticsearch安装路径\config\certs\http_ca.crt"

es_http_ca 是证书别名

相关文章:

SpringBoot 3整合Elasticsearch 8

这里写自定义目录标题 版本说明spring boot POM依赖application.yml配置新建模型映射Repository简单测试完整项目文件目录结构windows下elasticsearch安装配置 版本说明 官网说明 本文使用最新的版本 springboot: 3.2.3 spring-data elasticsearch: 5.2.3 elasticsearch: 8.1…...

突破编程_C++_查找算法(分块查找)

1 算法题 &#xff1a;使用分块算法在有序数组中查找指定元素 1.1 题目含义 在给定一个有序数组的情况下&#xff0c;使用分块查找算法来查找数组中是否包含指定的元素。分块查找算法是一种结合了顺序查找和二分查找思想的算法&#xff0c;它将有序数组划分为若干个块&#x…...

学习java第二十二天

IOC 容器具有依赖注入功能的容器&#xff0c;它可以创建对象&#xff0c;IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例&#xff0c;控制权由程序员控制&#xff0c;而"控制反转"是指new实例工作不由程序员来做而是交给Sp…...

每天学习一个Linux命令之systemctl

每天学习一个Linux命令之systemctl 介绍 在Linux系统中&#xff0c;systemctl命令是Systemd初始化系统的核心管理工具之一。systemd是用来启动、管理和监控运行在Linux上的系统的第一个进程&#xff08;PID 1&#xff09;&#xff0c;它提供了一整套强大的工具和功能&#xf…...

【机器学习入门】人工神经网络(二)卷积和池化

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 文章目录 系列文章目录前言一、卷积神经连接的局部性平移不变性 二、卷积处理图像的效果代码二、…...

公司内部局域网怎么适用飞书?

随着数字化办公的普及&#xff0c;企业对于内部沟通和文件传输的需求日益增长。飞书作为一款集成了即时通讯、云文档、日程管理、视频会议等多种功能的智能协作平台&#xff0c;已经成为许多企业提高工作效率的首选工具。本文将详细介绍如何在公司内部局域网中应用飞书&#xf…...

JVM的知识

什么是JVM 1.JVM&#xff1a; JVM其实就是运行在 操作系统之上的一个特殊的软件。 2.JVM的内部结构&#xff1a; &#xff08;1&#xff09;因为栈会将执行的程序弹出栈。 &#xff08;2&#xff09;垃圾99%的都是在堆和方法区中产生的。 类加载器&#xff1a;加载class文件。…...

大模型日报2024-03-24

利用LLMs评分及解释K-12科学答案 摘要: 本文研究了在K-12级科学教育中使用大型语言模型&#xff08;LLMs&#xff09;对短答案评分及解释。研究采用GPT-4结合少量样本学习和活跃学习&#xff0c;通过人机协作提供有意义的评估反馈。 MathVerse&#xff1a;多模态LLM解数学题效果…...

Android kotlin全局悬浮窗全屏功能和锁屏页面全屏悬浮窗功能一

1.前言 在进行app应用开发中,在实现某些功能中要求实现悬浮窗功能,分为应用内悬浮窗 ,全局悬浮窗和 锁屏页面悬浮窗功能 等,接下来就来实现这些悬浮窗全屏功能,首选看下第一部分功能实现 2.kotlin全局悬浮窗全屏功能和锁屏页面全屏悬浮窗功能一分析 悬浮窗是属于Androi…...

图像识别在安防领域的应用

图像识别技术在安防领域有着广泛的应用&#xff0c;它通过分析和理解图像中的视觉信息&#xff0c;为安防系统提供了强大的辅助功能。以下是一些主要的应用领域&#xff1a; 人脸识别&#xff1a;人脸识别技术是安防领域中最常见的应用之一。它可以帮助系统识别和验证个人身份…...

前端面试集中复习 - http篇

1. http请求方式 HTTP请求方式有哪些&#xff1a;GET POST PUT DELETE OPTIONS 1) GET POST 的区别&#xff1f; 场景上&#xff1a; GET 用于获取资源而不对服务器资源做更改提交的请求&#xff0c;多次执行结果一致。用于获取静态数据&#xff0c;幂等。 POST&#xff1…...

C++ - 类和对象(上)

目录 一、类的定义 二、访问限定符 public&#xff08;公有&#xff09; protected&#xff08;保护&#xff09; private&#xff08;私有&#xff09; 三、类声明和定义分离 四、外部变量和成员变量的区别与注意 五、类的实例化 六、类对象的模型 七、类的this指针…...

mysql基础4sql优化

SQL优化 插入数据优化 如果我们需要一次性往数据库表中插入多条记录&#xff0c;可以从以下三个方面进行优化。 insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry);-- 优化方案一&#xff1a;批量插入数据 Inser…...

实现Spring Web MVC中的文件上传功能,并处理大文件和多文件上传

实现Spring Web MVC中的文件上传功能&#xff0c;并处理大文件和多文件上传 在Spring Web MVC中实现文件上传功能并处理大文件和多文件上传是一项常见的任务。下面是一个示例&#xff0c;演示如何在Spring Boot应用程序中实现这一功能&#xff1a; 添加Spring Web依赖&#x…...

搭建vite项目

文章目录 Vite 是一个基于 Webpack 的开发服务器&#xff0c;用于开发 Vue 3 和 Vite 应用程序 一、创建一个vite项目二、集成Vue Router1.安装 vue-routernext插件2.在 src 目录下创建一个名为 router 的文件夹&#xff0c;并在其中创建一个名为 index.js 的文件。在这个文件中…...

Docker 安装mysql 主从复制

目录 1 MySql主从复制简介 1.1 主从复制的概念 1.2 主从复制的作用 2. 搭建主从复制 2.1 pull mysql 镜像 2.2 新建主服务器容器实例 3307 2.2.1 master创建 my.cnf 2.2.2 重启master 2.2.3 进入mysql 容器&#xff0c;创建同步用户 2.3 新建从服务器容器实例 3308…...

GPT每日面试题—如何实现二分查找

充分利用ChatGPT的优势&#xff0c;帮助我们快速准备前端面试。今日问题&#xff1a;如何实现二分查找&#xff1f; Q&#xff1a;如果在前端面试中&#xff0c;被问到如何实现二分查找&#xff0c;如果回答比较好&#xff0c;给出必要的代码示例 A&#xff1a;当被问到如何实…...

机器学习神经网络由哪些构成?

机器学习神经网络通常由以下几个主要组件构成&#xff1a; 1. **输入层&#xff08;Input Layer&#xff09;**&#xff1a;输入层接受来自数据源&#xff08;例如图像、文本等&#xff09;的原始输入数据。每个输入特征通常表示为输入层中的一个节点。 2. **隐藏层&#xff…...

代码随想录算法训练营day19 | 二叉树阶段性总结

各个部分题目的代码题解都在我往日的二叉树的博客中。 (day14到day22) 目录 二叉树理论基础二叉树的遍历方式深度优先遍历广度优先遍历 求二叉树的属性二叉树的修改与制造求二叉搜索树的属性二叉树公共最先问题二叉搜索树的修改与构造总结 二叉树理论基础 二叉树的理论基础参…...

数据库引论:3、中级SQL

一些更复杂的查询表达 3.1 连接表达式 拼接多张表的几种方式 3.1.1 自然连接 natural join&#xff0c;自动连接在所有共同属性上相同的元组 join… using( A 1 , A 2 , ⋯ A_1,A_2,\cdots A1​,A2​,⋯):使用括号里的属性进行自然连接&#xff0c;除了这些属性之外的共同…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

(12)-Fiddler抓包-Fiddler设置IOS手机抓包

1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求&#xff0c;也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求&#xff0c;比如 iPhone、iPad 和 MacBook 等苹…...

前端打包工具简单介绍

前端打包工具简单介绍 一、Webpack 架构与插件机制 1. Webpack 架构核心组成 Entry&#xff08;入口&#xff09; 指定应用的起点文件&#xff0c;比如 src/index.js。 Module&#xff08;模块&#xff09; Webpack 把项目当作模块图&#xff0c;模块可以是 JS、CSS、图片等…...

Redis——Cluster配置

目录 分片 一、分片的本质与核心价值 二、分片实现方案对比 三、分片算法详解 1. ‌范围分片&#xff08;顺序分片&#xff09;‌ 2. ‌哈希分片‌ 3. ‌虚拟槽分片&#xff08;Redis Cluster 方案&#xff09;‌ 四、Redis Cluster 分片实践要点 五、经典问题解析 C…...