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

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 TrainSpring Data ElasticsearchElasticsearchSpring FrameworkSpring 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&#xff0c;当时也是网上找了很多资料&#xff0c;最后解决个各种问题可以在springboot上运行了…...

【Lombok使用详解】

目录 前言&#xff1a;注解速查1.Lombok概念2.安装Lombok3. 使用Lombok3.1 &#x1f60a;Data3.2 GetterSetter3.3 NonNull3.4 Synchronized3.5 ToString&#xff1a;自动生成toString()方法3.6 Cleanup3.7 EqualsAndHashCode 前言&#xff1a;注解速查 NonNull : 用在成员方法…...

Tars框架 Tars-Go 学习

Tars 框架安装 网上安装教程比较多&#xff0c;官方可以参数这个 TARS官方文档 (tarsyun.com) 本文主要介绍部署应用。 安装完成后Tars 界面 增加应用amc 部署申请 amc.GoTestServer.GoTestObj 名称不知道的可以参考自己创建的app config 点击刷新可以看到自己部署的应用 服…...

基于JAVA+SpringBoot+VUE+微信小程序的前后端分离咖啡小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会的快速发展和…...

2015年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2015 级考研管理类联考数学真题一、问题求解&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。真题&#xff08;2015-01&…...

优秀软件设计特征与原则

1.摘要 一款软件产品好不好用, 除了拥有丰富的功能和人性化的界面设计之外, 还有其深厚的底层基础, 而设计模式和算法是构建这个底层基础的基石。好的设计模式能够让产品开发快速迭代且稳定可靠, 迅速抢占市场先机&#xff1b;而好的算法能够让产品具有核心价值, 例如字节跳动…...

设备管理系统-设备管理软件

一、为什么要使用设备管理系统 1.企业扩张快&#xff0c;设备配置多&#xff0c;管理混乱。 2.设备数量多&#xff0c;存放地点多&#xff0c;查找麻烦。 3.同类设备单独管理, 困难。 4.设备较多时相关信息统计容易出错&#xff0c;错误后修改困难。 二、凡尔码设备管理软件的…...

物联网AI MicroPython学习之语法 I2S音频总线接口

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; I2S 介绍 模块功能: I2S音频总线驱动模块 接口说明 I2S - 构建I2S对象 函数原型&#xff1a;I2S(id, sck, ws, sd, mode, bits, format, rate, ibuf)参数说明&#xff1a; 参数类型必选参数&#xff1f…...

Day31| Leetcode 455. 分发饼干 Leetcode 376. 摆动序列 Leetcode 53. 最大子数组和

进入贪心了&#xff0c;我觉得本专题是最烧脑的专题 Leetcode 455. 分发饼干 题目链接 455 分发饼干 让大的饼干去满足需求量大的孩子即是本题的思路&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {…...

基于C#实现赫夫曼树

赫夫曼树又称最优二叉树&#xff0c;也就是带权路径最短的树&#xff0c;对于赫夫曼树&#xff0c;我想大家对它是非常的熟悉&#xff0c;也知道它的应用场景&#xff0c;但是有没有自己亲手写过&#xff0c;这个我就不清楚了&#xff0c;不管以前写没写&#xff0c;这一篇我们…...

Android 13.0 app进程保活白名单功能实现

1.前言 在13.0的系统rom产品开发中,在某些重要的app即使进入后台,产品需求要求也不想被系统杀掉进程,需要app长时间保活,就是app进程保活白名单功能的实现, 所以需要在系统杀进程的时候不杀掉白名单的进程,接下来就看怎么样来实现这些功能 2.app进程保活白名单功能实…...

查找学习笔记

1、静态查找表 以下查找的索引均从1开始 &#xff08;1&#xff09;顺序查找&#xff08;带哨兵&#xff09; #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 中值滤波 &#xff0c;均值滤波&#xff0c;高斯滤波实战 cv2.blur-均值滤波 cv2.medianBlur-中值滤波 cv2.GaussianBlur-高斯滤波 直接看代码吧&#xff0c;代码很简单&#xff1a; import copy import math import matplotlib.pyplot as plt import matp…...

【教学类-06-07】20231124 (55格版)X-X之间的加法、减法、加减混合题

背景需求 在大四班里&#xff0c;预测试55格“5以内、10以内、20以内的加法题、减法题、加减混合题”的“实用性”。 由于只打印一份20以内加法减法混合题。 “这套20以内的加减法最难”&#xff0c;我询问谁会做&#xff08;摸底幼儿的水平&#xff09; 有两位男孩举手想挑…...

postgresql经常出现连接一会后服务器拒绝连接

本地连接远程Linux上PG数据库经常自动断开连接 原因&#xff1a;Linux设置的tcp的keepalive超时时间太长&#xff0c;如果网络状况不佳&#xff0c;可能会导致连接断掉。 [rootlocalhost ~]# sysctl -a | grep net.ipv4.tcp_keepalive sysctl: reading key "net.ipv6.con…...

迈巴赫S480升级主动式氛围灯 浪漫婉转的气氛

主动式氛围灯有263个可多色渐变的LED光源&#xff0c;营造出全情沉浸的动态光影氛围。结合智能驾驶辅助系统&#xff0c;可在转向或检测到危险时&#xff0c;予以红色环境光提示&#xff0c;令光影艺术彰显智能魅力。配件有6个氛围灯&#xff0c;1个电脑模块。 1、气候&#xf…...

Leetcode103 二叉树的锯齿形层序遍历

二叉树的锯齿形层序遍历 题解1 层序遍历双向队列 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 提示&#xff1a…...

可观测性建设实践之 - 日志分析的权衡取舍

指标、日志、链路是服务可观测性的三大支柱&#xff0c;在服务稳定性保障中&#xff0c;通常指标侧重于发现故障和问题&#xff0c;日志和链路分析侧重于定位和分析问题&#xff0c;其中日志实际上是串联这三大维度的一个良好桥梁。 但日志分析往往面临成本和效果之间的权衡问…...

Ceres使用

之前用过Ceres&#xff0c;但是只是跑例程&#xff0c;现在来着重学习一下使用流程。 1. 解决的问题 主要解决非线性优化问题。Ceres是一个较为通用的库。 参考链接 2. 如何使用 这个是求解的函数&#xff0c;主要关注这三个参数 CERES_EXPORT void Solve(const Solver::O…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...