spring boot整合Elasticsearch报错,maven引入Elasticsearch依赖后报错,解决引入新版本Elasticsearch7.17.X报错

前提:提前下载、配置好 elasticsearch,不会的可以点击下面的链接: Elasticsearch 保姆级下载安装配置

解决 maven 引入 ElasticSearch 依赖后各种报错

一. spring boot 整合 elasticsearch

1、ES 7.15.X 之后版本的依赖和配置类:本人使用的这个版本

<dependency>
	<groupId>co.elastic.clients</groupId>
	<artifactId>elasticsearch-java</artifactId>
	<version>7.17.14</version> <!--指定Elasticsearch的版本-->
</dependency>

<dependency>
	<groupId>jakarta.json</groupId>
	<artifactId>jakarta.json-api</artifactId>
	<version>2.0.1</version>
</dependency>

2、写配置类:

//注意这个包不导错了
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 org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticsearchConfiguration {
	@Bean
	public ElasticsearchClient restHighLevelClient() {
		RestClient restClient = RestClient.builder(
			new HttpHost("localhost", 9200)
			).build();
	ElasticsearchTransport elasticsearchTransport = new
		RestClientTransport(restClient,new JacksonJsonpMapper());
	return new ElasticsearchClient(elasticsearchTransport);
	}
}

再导入依赖和写入配置类之后,就开始测试是否成功连接到,直接去测试类写:

二、测试:看能不能连上

直接写测试类测试:比如,下面代码就是 创建一个索引:

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.indices.CreateIndexRequest;
import co.elastic.clients.elasticsearch.indices.CreateIndexResponse;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {
	//注入属性
	@Autowired
	private ElasticsearchClient client;
	
	@Test
	public void test() throws Exception {
		CreateIndexRequest request = new
		CreateIndexRequest.Builder().index("user_test").build();
		// 创建索引:不支持大写字母
		CreateIndexResponse createIndexResponse =
		client.indices().create(request);
		// 响应状态:成功为true
		System.out.println("索引操作 = " + createIndexResponse.acknowledged());
		System.out.println(createIndexResponse.index());
	}
	/*
	CreateIndexRequest request = new
	CreateIndexRequest.Builder().index("user_test").build();
	CreateIndexResponse createIndexResponse = client.indices().create(request);
	
	等同于下面这个代码:
	GetIndexResponse getIndexResponse = client.indices().get(e ->
	e.index("user_test"));
	*/
}

刷新 Elasticsearch Head,可以看到创建的索引,如下图所示:

在这里插入图片描述

提示:Elasticsearch Head 是个管理工具,可以查看下面这篇文章,详细介绍了 Elasticsearch Head 的安装配置:点击查看

三、解决各种报错

运行上面的代码,会报各种错误。或者,引入 Elasticsearch 会报各种错,可以看下面解决:

首先,所有的报错,先看自己的版本是否对应:

比如:这里我选的就是:Elasticsearch7.17.14,Spring Boot2.17.14。但是引入依赖之后会发现 Spring Boot2.17.14 和 Elasticsearch7.17.14 对应不起来,于是经测试,Spring
Boot2.17.17刚好对应 Elasticsearch7.17.14。

提示:也不是需要完全对应,只要上下相差不是很大就行(也最好不要低版本去贴合高版本),如果后续测试报错,首先检查版本是否匹配。下图的错误就有可能是版本的问题:
在这里插入图片描述

报错一:java.lang.IllegalStateException: Failed to load ApplicationContext 或 Error creating bean with name ‘restHighLevelClient’ defined in class path resource

解决:首先查看依赖,spring boot 和 elasticsearch 版本是否对应:

在这里插入图片描述
对应成功:

在这里插入图片描述

假如版本都对应,还是报错,如下:

报错二:Failed to instantiate [co.elastic.clients.elasticsearch.ElasticsearchClient]: Factory method ‘restHighLevelClient’ threw exception; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
java.lang.IllegalStateException: Failed to load ApplicationContext

Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper

Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper

解决:引入下面依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.17.0</version>
</dependency>

假如还是报错,如下:

报错三:java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/StreamReadConstraints
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/StreamReadConstraints

	at com.fasterxml.jackson.databind.util.TokenBuffer.<init>(TokenBuffer.java:65)
	at com.fasterxml.jackson.databind.util.TokenBuffer.<init>(TokenBuffer.java:170)
	at co.elastic.clients.json.jackson.JacksonJsonpParser.getJsonData(JacksonJsonpParser.java:431)
	at co.elastic.clients.json.JsonData.from(JsonData.java:162)
	at co.elastic.clients.json.JsonData.lambda$static$0(JsonData.java:169)
	at co.elastic.clients.json.JsonpDeserializer$3.deserialize(JsonpDeserializer.java:136)
	at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:77)

解决:上面这个版本过高,请降低这个版本,比如:

<!--版本不能过高-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>
报错四:co.elastic.clients.elasticsearch._types.ElasticsearchException: [es/indices.create] failed: [invalid_index_name_exception] Invalid index name [MyIndex], must be lowercase

创建索引时,不支持大写字母

在这里插入图片描述

结束!!!
生活除了代码,还有蓝天白云!!!!
请给点时间给自己!!!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学鸡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值