JestClient 建议不要使用 java.lang.NoSuchMethod 错误

Posted

技术标签:

【中文标题】JestClient 建议不要使用 java.lang.NoSuchMethod 错误【英文标题】:JestClient Suggest not Working with java.lang.NoSuchMethod Error 【发布时间】:2017-06-02 18:46:11 【问题描述】:

对于所有搜索,Jest-client 都会使用 uri 进行初始化,如下所示:

http://serverIp:serverPort _all/_search

如何使用 uri 初始化客户端,类似于以下内容?

http://serverIp:serverPort _all/_suggest

我在一个方法中使用了下面的代码,其中Ipas JestClient和一个词:

String suggestionName = "custom-suggestion-3";

Suggest suggest = new Suggest.Builder("" +
                                        "  \"" + suggestionName + "\" : " +
                                        "    \"text\" :" + "\"" + wordToSearch + "\""+
                                        "    \"term\" : " +
                                        "      \"field\" : \"description\"" +
                                        "    " +
                                        "  " +
                                        "").build();


SuggestResult result = client.execute(suggest);

但是,它会产生错误

java.lang.NoSuchMethodError: io.searchbox.client.http.JestHttpClient.getElasticSearchServer()Ljava/lang/String;' 在 client.execute(suggest) 期间。

在调试过程中,我复制了 suggest 变量的值并将其粘贴到 Sense 中,它按预期工作。

我正在为 _all/_search 使用以下 maven 依赖项

<dependency>
   <groupId>io.searchbox</groupId>
      <artifactId>jest</artifactId>
         <version>0.1.2</version>
 </dependency>

运行的elastic版本是5.0.1,对于Suggest,已经导入了以下依赖。

<dependency>
   <groupId>io.searchbox</groupId>
       <artifactId>jest-common</artifactId>
          <version>2.0.0</version>
</dependency>

有什么建议吗?

【问题讨论】:

【参考方案1】:

java.lang.NoSuchMethodError 表示您的依赖项之间存在版本不匹配。具体来说,某处试图调用带有签名的方法

String getElasticSearchServer()

JestHttpClient 类中。在运行时使用的该类的版本中不存在此方法。

建议:

    检查实际使用的各个 JAR 的版本。尤其要检查您的部署没有同一个 JAR 的多个版本。

    对您的 jest 和 jest-common 依赖项使用相同的版本。据我所知,它们是作为具有相同版本号的集合构建和测试的。

    Jest 版本 0.1.2 很古老。看起来它是在 2012 年 12 月发布的。即使是 2.0.0 也很旧:2015 年 11 月。

    由于您使用的是 ElasticSearch 5.0.1,因此正确的 Jest 版本应该是 5.0.0 或更高版本。参考:https://github.com/searchbox-io/Jest

【讨论】:

以上是关于JestClient 建议不要使用 java.lang.NoSuchMethod 错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥人们建议不要使用 Amazon RDS?

为啥 auth0 建议不要在 localStorage 中存储令牌?

建议不要使用,redis过期监听实现关闭订单

都在建议你不要直接使用 @Async 注解,为什么?

都在建议你不要直接使用 @Async 注解,为什么?

我为什么建议不要用CMake