Я пытаюсь проиндексировать документ в моей службе elasticsearch aws, но получаю ошибку NoClassDeffounderror. Я предоставил свой код ниже и любезно помог мне решить эту проблему.
Elasti c версия поиска : 7.1 (In 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, но она даже не работает в моей основной функции, если я выполняю ее отдельно.