当前位置: 代码网 > it编程>编程语言>Java > ClassNotFoundException: org.elasticsearch.client.Cancellable 和nosuchfielderror:lucene_8_0_0

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

2024年08月01日 Java 我要评论
Cspringcloud整合es7.6.2出现:lassNotFoundException: 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;
    }

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

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

为什么版本不一致,原来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);
    }

测试成功:

  1. 解决: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包,所以才没有找到对应的版本。

解决方案:把 lucene-core7.7.2 的jar包删除

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com