【问题标题】:Elasticsearch resthighlevelclient Noclassfound error while indexing data to AWS elasticsearch service将数据索引到 AWS elasticsearch 服务时 Elasticsearch resthighlevelclient Noclassfound 错误
【发布时间】:2020-07-14 18:29:14
【问题描述】:

我正在尝试将文档索引到我的 elasticsearch 服务 aws,但我收到 NoClassDeffounderror。我在下面给出了我的代码库,请帮助我解决这个问题。

弹性搜索版本:7.1(在 aws 中)

pom 依赖:

<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.1.1</version>
        </dependency>

代码库

package com.saas.elasticsearch;

import java.io.IOException;

import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import com.amazonaws.auth.AWS4Signer;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;

public class test {

    private static String serviceName = "es";
    private static String region = "us-west-1";
    private static String aesEndpoint = "https://search-google-qrftppppppdfpy6qe57kzjha.us-west-1.es.amazonaws.com"; // e.g.
                                                                                                                        // https://search-mydomain.us-west-1.es.amazonaws.com
    private static String Ecmindex = "ecmindex";
    // private static String duckcreekindex = "ecmindex";
    private static String type = "_doc";

    final static AWSCredentialsProvider credentialsProvider = new DefaultAWSCredentialsProviderChain();

    public static RestHighLevelClient esClient(String serviceName, String region) {
        AWS4Signer signer = new AWS4Signer();
        signer.setServiceName(serviceName);
        signer.setRegionName(region);
        HttpRequestInterceptor interceptor = new AWSRequestSigningApacheInterceptor(serviceName, signer,
                credentialsProvider);
        return new RestHighLevelClient(RestClient.builder(HttpHost.create(aesEndpoint))
                .setHttpClientConfigCallback(hacb -> hacb.addInterceptorLast(interceptor)));
    }

    

    public static void main(String[] args) throws IOException {
        RestHighLevelClient esClient = esClient(serviceName, region);
        String JsonString = "{\r\n" + "  \"Name\": \"Jai\",\r\n" + "  \"Age\": \"31\",\r\n"
                + "  \"Occupation\": \"architect\",\r\n" + "  \"City\": \"xxxxcdf\"\r\n" + "}";
        
        IndexRequest indexRequest = new IndexRequest("duke", "_doc", "34567");
        indexRequest.source(JsonString, XContentType.JSON);
        IndexResponse indexResponse = esClient.index(indexRequest, RequestOptions.DEFAULT);
        
        System.out.println(indexResponse.toString());
    }
}

运行主函数时出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/action/admin/indices/analyze/AnalyzeRequest
    at org.elasticsearch.client.RestHighLevelClient.<init>(RestHighLevelClient.java:244)
    at org.elasticsearch.client.RestHighLevelClient.<init>(RestHighLevelClient.java:273)
    at org.elasticsearch.client.RestHighLevelClient.<init>(RestHighLevelClient.java:265)
    at com.saas.elasticsearch.test.esClient(test.java:36)
    at com.saas.elasticsearch.test.main(test.java:43)
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.action.admin.indices.analyze.AnalyzeRequest
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more

有人可以帮我解决这个问题吗,因为我必须将其作为 java 服务,但如果我单独执行它,它甚至无法在我的主要功能中工作。

【问题讨论】:

    标签: spring-boot elasticsearch aws-java-sdk aws-elasticsearch aws-java-sdk-2.x


    【解决方案1】:

    我看到了同样的错误

    java.lang.NoClassDefFoundError: org/elasticsearch/action/admin/indices/analyze/AnalyzeRequest

    但我可以通过将运行时 java 版本从 15 切换到 11 来解决它。

    【讨论】:

      【解决方案2】:

      你可能需要核心依赖:

      <dependency>
          <groupId>org.elasticsearch</groupId>
          <artifactId>elasticsearch</artifactId>
          <version>7.1.1</version>
      </dependency>
      

      【讨论】:

        猜你喜欢
        • 2021-08-11
        • 2018-12-22
        • 2018-10-31
        • 2020-12-29
        • 1970-01-01
        • 2021-09-01
        • 2013-06-16
        • 2019-01-22
        • 1970-01-01
        相关资源
        最近更新 更多