Java Solrj无法使用Solr连接到AWS EC2盒

Java Solrj无法使用Solr连接到AWS EC2盒,java,amazon-web-services,amazon-ec2,solr,solrj,Java,Amazon Web Services,Amazon Ec2,Solr,Solrj,我正在尝试连接到我在EC2 Ubuntu AMI上运行的solr实例。我已经为solr打开了端口7574、8982和9983。我能很好地看到控制台。我正在使用solrj连接到我的实例,并试图用一个字段编写一个Solr文档 CloudSolrClient solr = new CloudSolrClient.Builder().withZkHost(external-ip:9983).build(); SolrInputDocument doc = new SolrInputDocument();

我正在尝试连接到我在EC2 Ubuntu AMI上运行的solr实例。我已经为solr打开了端口7574、8982和9983。我能很好地看到控制台。我正在使用solrj连接到我的实例,并试图用一个字段编写一个Solr文档

CloudSolrClient solr = new CloudSolrClient.Builder().withZkHost(external-ip:9983).build();
SolrInputDocument doc = new SolrInputDocument();
doc.addField("test", "test");
solr.add("collection", doc);
solr.commit();
从Solr管理控制台,我可以看到空集合。5次重试后,我得到了这个错误

org.apache.solr.client.solrj.SolrServerException:没有可用于处理此请求的实时SolrServer:[,

原因:java.net.ConnectException:连接超时:连接

我不明白为什么错误消息中会显示内部ip,以及为什么它通常无法连接

我用命令
/Solr-ecloud-noprompt
启动了Solr


Java 8

看看你的问题,我想你在AWS EC2实例中运行Solr,并且你在本地计算机上使用Solrj与Solr交互

命令
/solr-e cloud
在本地工作站上启动SolrCloud群集。由脚本创建的网络具有与您的需要不兼容的拓扑。 以独立方式启动Solr(
/Solr start
)应该可以让您轻松地远程连接

在这种情况下,您必须使用
HttpSolrClient

String urlString = "http://remote-ec2-ip-address:8983/solr/yourcollection";
SolrClient solr = new HttpSolrClient.Builder(urlString).build();
在SolrCloud模式下启动Solr时,Solrj客户端使用Zookeeper来发现SolrCloud集合的Solr端点

但是Zookeeper会向客户端返回每个Solr实例的URL列表,在您的情况下,这些URL使用的IP地址只能在AWS网络中访问

这就是你无法远程连接的原因

更新

需要明确的是,只有在需要企业配置时,当您有数百万个查询需要服务和/或数十亿个文档需要搜索时,SolrCloud才有意义


集群还意味着许多EC2实例,通常是3个(或更多)Solr实例和3个(或5个)Zookeeper实例。

谢谢你的建议。我会尝试一下HttpSolrClient,但如果我想在SolrCloud模式下运行,我必须设置什么?我看到另一个网页提到将serverip1:2181、serverip2:2182、serverip3:2183添加到solr.xml,您需要远程连接的SolrCloud配置必须手动完成,并且这不是一件容易的事。首先,我建议看一下: