一天时间都在解决这个问题。做一下笔记吧
在做springcloud整合es7.6.2出现了一些问题。
两个主要的报错:
先解决第一个:ClassNotFoundException: org.elasticsearch.client.Cancellable
我的maven配置
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
配置类也配置了
@Bean
public RestHighLevelClient esRestClient(){
RestClientBuilder builder = null;
builder = RestClient.builder(new HttpHost("127.0.0.1", 9200, "http"));
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
return restHighLevelClient;
}
然后在启动时就报了以下错误
看了一下相关的博客,得出是版本依赖不一致的问题。
为什么版本不一致,原来springbootd(我的版本是2.2.2)的依赖内置了elasticsearch,所以导致了版本不一致的问题。
解决版本不一致的问题:
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>7.6.2</elasticsearch.version>
</properties>
但是我这么设置,不生效
所以我改了使用以下方式,设置相同版本的依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.6.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.6.2</version>
</dependency>
</dependencies>
</dependencyManagement>
效果就出来了
前提一定要删除旧的jar包,不然还是引用原来的版本!
不删除就会出现这种情况
测试数据:
@Resource
private RestHighLevelClient restHighLevelClient;
@Test
public void indexDataTest() throws IOException {
//新建一个索引
IndexRequest indexRequest = new IndexRequest("users");
//数据id
indexRequest.id("1");
//通过对象转json方式存储到es
User user = new User();
user.setUserName("zhangsan");
user.setGender("男");
user.setAge(22);
//转json
String jsonString = JSON.toJSONString(user);
indexRequest.source(jsonString, XContentType.JSON); //要保存的内容
//执行操作
IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
//输入结果
System.out.println(index);
}
测试成功:
解决:java.lang.NoSuchFieldError: LUCENE_8_0_0
但是通过接口的方式保存数据就会出现这个问题:
排查原因:
打开Version.java,可以看到,我当前的elastic版本是7.6.2,那lucene的版本也应该对应的是8.4.0,但是我用Ctrl +鼠标右键,却没有进入到找到对应的版本。而只能定位到7.7.2的版本
最高支持到7.7.2的版本
最后打开 lucene-core-8.4.0.jar > org.apache.lucene.util> Version.java 这个类,才发现这个包下才有支持7.6.2版本的 lucene版本
原因: 应该是elastic调用了之前的 6.8.5版本的jar包,所以才没有找到对应的版本。文章来源:https://www.toymoban.com/news/detail-766118.html
解决方案:把 lucene-core7.7.2 的jar包删除文章来源地址https://www.toymoban.com/news/detail-766118.html
到了这里,关于ClassNotFoundException: org.elasticsearch.client.Cancellable 和nosuchfielderror:lucene_8_0_0的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!