ClassNotFoundException: org.elasticsearch.client.Cancellable 和nosuchfielderror:lucene_8_0_0

这篇具有很好参考价值的文章主要介绍了ClassNotFoundException: org.elasticsearch.client.Cancellable 和nosuchfielderror:lucene_8_0_0。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一天时间都在解决这个问题。做一下笔记吧

在做springcloud整合es7.6.2出现了一些问题。

两个主要的报错:

  1. 先解决第一个: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;
    }

然后在启动时就报了以下错误

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

看了一下相关的博客,得出是版本依赖不一致的问题。

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

为什么版本不一致,原来springbootd(我的版本是2.2.2)的依赖内置了elasticsearch,所以导致了版本不一致的问题。

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

解决版本不一致的问题:

    <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>

效果就出来了

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

前提一定要删除旧的jar包,不然还是引用原来的版本!

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

不删除就会出现这种情况

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

测试数据:

        @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);
    }

测试成功:

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档
  1. 解决:java.lang.NoSuchFieldError: LUCENE_8_0_0

但是通过接口的方式保存数据就会出现这个问题:

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

排查原因:

打开Version.java,可以看到,我当前的elastic版本是7.6.2,那lucene的版本也应该对应的是8.4.0,但是我用Ctrl +鼠标右键,却没有进入到找到对应的版本。而只能定位到7.7.2的版本

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

最高支持到7.7.2的版本

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

最后打开 lucene-core-8.4.0.jar > org.apache.lucene.util> Version.java 这个类,才发现这个包下才有支持7.6.2版本的 lucene版本

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

原因: 应该是elastic调用了之前的 6.8.5版本的jar包,所以才没有找到对应的版本。

解决方案:把 lucene-core7.7.2 的jar包删除文章来源地址https://www.toymoban.com/news/detail-766118.html

程序包org.elasticsearch.client不存在,springcloud,Elasticsearch,elasticsearch,spring cloud,全文检索,Powered by 金山文档

到了这里,关于ClassNotFoundException: org.elasticsearch.client.Cancellable 和nosuchfielderror:lucene_8_0_0的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包