在将 elasticsearch-rest-high-level-client 的依赖项写入 pom.xml 文件时需要注意的事项
为了从Java程序中调用Elasticsearch的REST API,根据官方网站的说明,我在pom.xml文件中添加了以下内容。
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.1</version>
</dependency>
构建成功后,执行时发生了以下异常。
java.lang.NoSuchMethodError: org.elasticsearch.action.search.MultiSearchResponse.fromXContext(Lorg/elasticsearch/common/xcontent/XContentParser;)Lorg/elasticsearch/action/search/MultiSearchResponse;
在java.lang.invoke.MethodHandleNatives.resolve(Native Method)处
在java.lang.invoke.MemberName$Factory.resolve(MemberName.java:965)处
在java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:990)处
在java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1387)处
在java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1739)处
在java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:442)处
在org.elasticsearch.client.RestHighLevelClient.multiSearch(RestHighLevelClient.java:423)处
经过调查,我们发现下载了elasticsearch-rest-high-level-client-6.3.1.jar时,其依赖文件elasticsearch-5.6.8.jar是问题的根源。
通过在pom.xml文件中明确地添加以下依赖项进行了解决。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.3.1</version>
</dependency>