docker、elasticsearch8、springboot3集成备忘
目录
一、背景
二、安装docker
三、下载安装elasticsearch
四、下载安装elasticsearch-head
五、springboot集成elasticsearch
一、背景
前两年研究了一段时间elasticsearch,当时也是网上找了很多资料,最后解决个各种问题可以在springboot上运行了,本来是想记录下解决过程,但是由于某些原因就搁置了下来。最近手头有个项目正好需要用到elasticsearch,再拿起来的时候发现很多地方都不记得了,于是花了2天时间又搞了下,终于可以正常运行了,这次准备花点时间把遇到的一些问题、解决方法以及需要注意的地方记录下,便于日后需要时查看。
二、安装docker
2.1、从官网下载docker,好像需要科学上网,如果不行的话就随便百度个下载吧。
2.2、安装3个Windows功能,如下图


2.3、安装WSL,在命令行窗口执行wsl --install,如果安装不成功的话可以尝试从微软应用商店安装(好像只有win10可以搜到这个),搜索wsl,如下图

2.4、安装docker,这个没啥需要特别记录的
2.5、执行wsl --version查看当前使用的是不是wsl2,如果不是wsl2并且docker也确实不能正常启动的话,可以尝试切换到wsl2试试,切换命令为:wsl --set-default-version 2
三、下载安装elasticsearch
3.1、根据springboot版本下载对应的elasticsearch镜像,对应关系如下表:
| Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework | Spring Boot |
|---|---|---|---|---|
| 2023.1 (Vaughan) | 5.2.x | 8.11.1 | 6.1.x | 3.2.x |
| 2023.0 (Ullmann) | 5.1.x | 8.7.1 | 6.0.x | 3.1.x |
| 2022.0 (Turing) | 5.0.x[1] | 8.5.3 | 6.0.x | 3.0.x |
| 2021.2 (Raj) | 4.4.x[1] | 7.17.3 | 5.3.x | 2.7.x |
| 2021.1 (Q) | 4.3.x[1] | 7.15.2 | 5.3.x | 2.6.x |
| 2021.0 (Pascal) | 4.2.x[1] | 7.12.0 | 5.3.x | 2.5.x |
| 2020.0 (Ockham) | 4.1.x[1] | 7.9.3 | 5.3.2 | 2.4.x |
| Neumann | 4.0.x[1] | 7.6.2 | 5.2.12 | 2.3.x |
| Moore | 3.2.x[1] | 6.8.12 | 5.2.12 | 2.2.x |
| Lovelace | 3.1.x[1] | 6.2.2 | 5.1.19 | 2.1.x |
| Kay | 3.0.x[1] | 5.5.0 | 5.0.13 | 2.0.x |
| Ingalls | 2.1.x[1] | 2.4.0 | 4.3.25 | 1.5.x |
也可以到spring官网查看最新的对应关系
3.2、下载指定版本的elasticsearch镜像:
docker pull elasticsearch:8.11.0
3.3、安装镜像:
docker run --name elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -d elasticsearch:8.11.0
3.4、进入镜像修改配置
3.4.1、进入容器控制台:
docker exec -it elastic /bin/bash
3.4.2、进入bin目录:cd bin
3.4.3、修改密码:
elasticsearch-setup-passwords interactive
3.4.4、下载配置文件到本地修改:
docker cp elastic:/usr/share/elasticsearch/config/elasticsearch.yml d:/
3.4.5、在文件末尾添加(不添加的话elasticsearch-head连接时会报跨域错误)
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization

3.4.6、上传覆盖原文件:
docker cp d:\elasticsearch.yml elastic:/usr/share/elasticsearch/config/
3.5、添加IK分词插件
3.5.1、下载IK分词插件,新建一个IK目录,解压到目录中。
3.5.2、上传IK文件夹
docker cp d:\xxx\ik elastic:\usr\share\elasticsearch\plugins\
3.5.3、重启elastic
docker restart elastic
3.6、JDK导入证书(不是必须)
3.6.1、从elasticsearch下载证书
docker cp elastic:/usr/share/elasticsearch/config/certs/http_ca.crt d:\下载目录
3.6.2、打开控制台,进入JDK证书目录
cd C:\Program Files\Java\jdk-18.0.2.1\lib\security
3.6.3、执行命令导入证书
C:\Program Files\Java\jdk-18.0.2.1\binkeytool -keystore cacerts -importcert -alias "es_http_ca" -file d:/下载目录/http_ca.crt
四、下载安装elasticsearch-head
4.1、下载elasticsearch-head
docker pull mobz/elasticsearch-head:5
4.2、安装容器:
docker run --name elastic-head -p 9100:9100 -d mobz/elasticsearch-head:5
4.3、在地址栏输入http://localhost:9100/?auth_user=elastic&auth_password=xxxxx,查看连接elastic是否成功,注意:使用https连接elasticsearch:http://localhost:9200
五、springboot集成elasticsearch
5.1、springboot3.2.0集成elasticsearch8.11.0运行正常,不过从官方文档看3.2.x要求是8.11.1。下面是必须的一些包。
<?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.0-SNAPSHOT</version></parent><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>io.github.hakky54</groupId><artifactId>sslcontext-kickstart</artifactId><version>7.4.7</version></dependency><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></dependencies>
</project>
5.2、新建配置类
package com.rwzhang.elastic.elasticsearchdemo.config;import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import nl.altindag.ssl.SSLFactory;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.data.repository.query.QueryLookupStrategy;@Configuration
@EnableElasticsearchRepositories(queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND,basePackages = "com.elastic.elasticsearchdemo.repository")
public class ElasticsearchConfig {@Beanpublic ElasticsearchClient elasticsearchClient(){SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build();final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "密码"));RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https"));builder = builder.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider).setSSLContext(sslFactory.getSslContext()).setSSLHostnameVerifier(sslFactory.getHostnameVerifier()));RestClient restClient = builder.build();ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());return new ElasticsearchClient(transport);}
}
5.3、新建实体类
public class News implements Serializable {@Id@Field(store=true, index = false, type = FieldType.Integer)Integer id;@Field(analyzer="ik_max_word", searchAnalyzer="ik_smart", type = FieldType.Text)String title;@Field(analyzer="ik_max_word", searchAnalyzer="ik_smart", type = FieldType.Text)String content;public News(String title, String content) {this.title = title;this.content = content;}
}
5.4、新建repository
@Repository
public interface NewsRepository extends ElasticsearchRepository<News, Integer> {@Highlight(fields = {@HighlightField(name = "content")},parameters = @HighlightParameters(preTags = {"<span style='color:red'>"},postTags = {"</span>"},numberOfFragments = 10, //片段个数fragmentSize = 100 //片段长度))List<SearchHit<News>> findByContent(String content, Pageable pageable);long countByContent(String content);
}
5.5、新建测试类
@RunWith(SpringRunner.class)
@SpringBootTest
class ElasticsearchDemoApplicationTests {@ResourceNewsRepository newsRepository;@Testvoid countByContent() {long count = newsRepository.countByContent("足球");System.out.println(StrUtil.format("countByContent: {}", count));}
}

相关文章:
docker、elasticsearch8、springboot3集成备忘
目录 一、背景 二、安装docker 三、下载安装elasticsearch 四、下载安装elasticsearch-head 五、springboot集成elasticsearch 一、背景 前两年研究了一段时间elasticsearch,当时也是网上找了很多资料,最后解决个各种问题可以在springboot上运行了…...
【Lombok使用详解】
目录 前言:注解速查1.Lombok概念2.安装Lombok3. 使用Lombok3.1 😊Data3.2 GetterSetter3.3 NonNull3.4 Synchronized3.5 ToString:自动生成toString()方法3.6 Cleanup3.7 EqualsAndHashCode 前言:注解速查 NonNull : 用在成员方法…...
Tars框架 Tars-Go 学习
Tars 框架安装 网上安装教程比较多,官方可以参数这个 TARS官方文档 (tarsyun.com) 本文主要介绍部署应用。 安装完成后Tars 界面 增加应用amc 部署申请 amc.GoTestServer.GoTestObj 名称不知道的可以参考自己创建的app config 点击刷新可以看到自己部署的应用 服…...
基于JAVA+SpringBoot+VUE+微信小程序的前后端分离咖啡小程序
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着社会的快速发展和…...
2015年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版
文章目录 2015 级考研管理类联考数学真题一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2015-01&…...
优秀软件设计特征与原则
1.摘要 一款软件产品好不好用, 除了拥有丰富的功能和人性化的界面设计之外, 还有其深厚的底层基础, 而设计模式和算法是构建这个底层基础的基石。好的设计模式能够让产品开发快速迭代且稳定可靠, 迅速抢占市场先机;而好的算法能够让产品具有核心价值, 例如字节跳动…...
设备管理系统-设备管理软件
一、为什么要使用设备管理系统 1.企业扩张快,设备配置多,管理混乱。 2.设备数量多,存放地点多,查找麻烦。 3.同类设备单独管理, 困难。 4.设备较多时相关信息统计容易出错,错误后修改困难。 二、凡尔码设备管理软件的…...
物联网AI MicroPython学习之语法 I2S音频总线接口
学物联网,来万物简单IoT物联网!! I2S 介绍 模块功能: I2S音频总线驱动模块 接口说明 I2S - 构建I2S对象 函数原型:I2S(id, sck, ws, sd, mode, bits, format, rate, ibuf)参数说明: 参数类型必选参数?…...
Day31| Leetcode 455. 分发饼干 Leetcode 376. 摆动序列 Leetcode 53. 最大子数组和
进入贪心了,我觉得本专题是最烧脑的专题 Leetcode 455. 分发饼干 题目链接 455 分发饼干 让大的饼干去满足需求量大的孩子即是本题的思路: class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {…...
基于C#实现赫夫曼树
赫夫曼树又称最优二叉树,也就是带权路径最短的树,对于赫夫曼树,我想大家对它是非常的熟悉,也知道它的应用场景,但是有没有自己亲手写过,这个我就不清楚了,不管以前写没写,这一篇我们…...
Android 13.0 app进程保活白名单功能实现
1.前言 在13.0的系统rom产品开发中,在某些重要的app即使进入后台,产品需求要求也不想被系统杀掉进程,需要app长时间保活,就是app进程保活白名单功能的实现, 所以需要在系统杀进程的时候不杀掉白名单的进程,接下来就看怎么样来实现这些功能 2.app进程保活白名单功能实…...
查找学习笔记
1、静态查找表 以下查找的索引均从1开始 (1)顺序查找(带哨兵) #include<iostream> #include<vector>using namespace std;int search(vector<int> arr, int key) {arr[0] key;int i;for (i arr.size() - 1…...
Qt QIODevice介绍
作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 主要功能用法示例读取数据写入数据使用数据流基于套接字的读写注意事项QIODevice 是 Qt 中所有输入/输出设备的抽象基类。它为派生类提供了一组标准的接口用于读写数据。这些派…...
python -opencv 中值滤波 ,均值滤波,高斯滤波实战
python -opencv 中值滤波 ,均值滤波,高斯滤波实战 cv2.blur-均值滤波 cv2.medianBlur-中值滤波 cv2.GaussianBlur-高斯滤波 直接看代码吧,代码很简单: import copy import math import matplotlib.pyplot as plt import matp…...
【教学类-06-07】20231124 (55格版)X-X之间的加法、减法、加减混合题
背景需求 在大四班里,预测试55格“5以内、10以内、20以内的加法题、减法题、加减混合题”的“实用性”。 由于只打印一份20以内加法减法混合题。 “这套20以内的加减法最难”,我询问谁会做(摸底幼儿的水平) 有两位男孩举手想挑…...
postgresql经常出现连接一会后服务器拒绝连接
本地连接远程Linux上PG数据库经常自动断开连接 原因:Linux设置的tcp的keepalive超时时间太长,如果网络状况不佳,可能会导致连接断掉。 [rootlocalhost ~]# sysctl -a | grep net.ipv4.tcp_keepalive sysctl: reading key "net.ipv6.con…...
迈巴赫S480升级主动式氛围灯 浪漫婉转的气氛
主动式氛围灯有263个可多色渐变的LED光源,营造出全情沉浸的动态光影氛围。结合智能驾驶辅助系统,可在转向或检测到危险时,予以红色环境光提示,令光影艺术彰显智能魅力。配件有6个氛围灯,1个电脑模块。 1、气候…...
Leetcode103 二叉树的锯齿形层序遍历
二叉树的锯齿形层序遍历 题解1 层序遍历双向队列 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 提示:…...
可观测性建设实践之 - 日志分析的权衡取舍
指标、日志、链路是服务可观测性的三大支柱,在服务稳定性保障中,通常指标侧重于发现故障和问题,日志和链路分析侧重于定位和分析问题,其中日志实际上是串联这三大维度的一个良好桥梁。 但日志分析往往面临成本和效果之间的权衡问…...
Ceres使用
之前用过Ceres,但是只是跑例程,现在来着重学习一下使用流程。 1. 解决的问题 主要解决非线性优化问题。Ceres是一个较为通用的库。 参考链接 2. 如何使用 这个是求解的函数,主要关注这三个参数 CERES_EXPORT void Solve(const Solver::O…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
