AWS ElasticSearch预构建传输客户端java.lang.NoSuchMethodError
我在EclipseIDE中创建了一个Java项目,并在一个类中创建了此代码。我已经包含了所有jar文件依赖项AWS ElasticSearch预构建传输客户端java.lang.NoSuchMethodError,java,amazon-web-services,elasticsearch,Java,Amazon Web Services,elasticsearch,我在EclipseIDE中创建了一个Java项目,并在一个类中创建了此代码。我已经包含了所有jar文件依赖项 TransportClient client = new PreBuiltTransportClient(Settings.EMPTY,Arrays.asList( Netty3Plugin.class, Netty4Plugin.class, ReindexPlugin.class,
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY,Arrays.asList(
Netty3Plugin.class,
Netty4Plugin.class,
ReindexPlugin.class,
PercolatorPlugin.class,
MustachePlugin.class))
.addTransportAddress(new InetSocketTransportAddress(InetAddress
.getByName("https://search-my-test-domain-XXXXXXXXXXXXXXXXXXXXXX.us-east-1.es.amazonaws.com"), 9300));
但是当我运行代码时,会出现这个错误
Exception in thread "main" java.lang.NoSuchMethodError: org.elasticsearch.transport.client.PreBuiltTransportClient.addPlugins(Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Collection;
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:125)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:111)
at ESConnManager.retrieveDataFromES(ESConnManager.java:572)
at ESConnManager.main(ESConnManager.java:166)
线程“main”java.lang.NoSuchMethodError中的异常:org.elasticsearch.transport.client.PreBuiltTransportClient.addPlugins(Ljava/util/Collection;Ljava/util/Collection;)Ljava/util/Collection;
在org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:125)
位于org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:111)
在ESConnManager.retrieveDataFromES(ESConnManager.java:572)
位于ESConnManager.main(ESConnManager.java:166)
我正在使用elasticsearch v5.3.2和JavaAPI v5.3。有什么解决方案吗?您不需要指定这五个插件,因为可以看到,
PreBuiltTransportClient
构造函数默认已经加载了这五个插件
所以用这个来代替:
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress
.getByName("https://search-my-test-domain-XXXXXXXXXXXXXXXXXXXXXX.us-east-1.es.amazonaws.com"), 9300));
但是,由于您试图访问AWS管理的ES群集,只需知道传输客户端不受支持,您只能通过HTTP而不是TCP访问AWS ES实例。您将遇到的下一个错误是节点不可用。您不需要指定这五个插件,因为可以看到,
PreBuiltTransportClient
构造函数默认已经加载了这五个插件
所以用这个来代替:
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress
.getByName("https://search-my-test-domain-XXXXXXXXXXXXXXXXXXXXXX.us-east-1.es.amazonaws.com"), 9300));
但是,由于您试图访问AWS管理的ES群集,只需知道传输客户端不受支持,您只能通过HTTP而不是TCP访问AWS ES实例。您将遇到的下一个错误是节点不可用。即使没有指定插件,我仍然会遇到NoSuchMethod错误。还有其他想法吗?你确定没有错误地包含另一个elasticsearch JAR依赖项吗?我从elasticsearch中添加了elasticsearch-5.3.2.JAR、rest-5.3.2.JAR、transport-5.3.2.JAR。RestClient RestClient=RestClient.builder(新的HttpHost(“search-my-test-domain-xxxxxxxxxxxxxx.us-east-1.es.amazonaws.com”,80,“http”))).build();这个很好用。但是对于TransportClient,我一直收到相同的错误。正如我在上一段中提到的,您无论如何都不能使用TransportClient,因为AWS ES不允许您连接TCP端口。坚持使用RestClientI仍然会得到NoSuchMethod错误,即使我没有指定插件。还有其他想法吗?你确定没有错误地包含另一个elasticsearch JAR依赖项吗?我从elasticsearch中添加了elasticsearch-5.3.2.JAR、rest-5.3.2.JAR、transport-5.3.2.JAR。RestClient RestClient=RestClient.builder(新的HttpHost(“search-my-test-domain-xxxxxxxxxxxxxx.us-east-1.es.amazonaws.com”,80,“http”))).build();这个很好用。但是对于TransportClient,我一直收到相同的错误。正如我在上一段中提到的,您无论如何都不能使用TransportClient,因为AWS ES不允许您连接TCP端口。坚持使用RestClient