1

我正在尝试将文档索引到我的弹性搜索服务 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 服务,但如果我单独执行它,它甚至不能在我的主要功能中工作。

4

2 回答 2

0

您可能需要核心依赖项:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.1.1</version>
</dependency>
于 2021-01-15T15:31:16.760 回答
0

我看到了同样的错误

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

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

于 2021-01-08T13:31:09.467 回答