Solrj 无法使用 Solr 连接到 AWS EC2 框

Solrj cannot connect to AWS EC2 box with Solr

我正在尝试连接到我在 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:[http://internal-ip:8983/solr/collection, http://internal-ip:7574/solr/collection]

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

我很困惑为什么错误消息中显示了 internal-ip 以及为什么它通常无法连接。

我用命令 ./solr -e cloud -noprompt

启动了 Solr

Java 8

根据您的问题,我想您是 运行 AWS EC2 实例中的 Solr,并且您正在使用 Solrj 从本地计算机与 Solr 进行交互。

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

在这种情况下你必须使用 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 returns 向客户端发送每个 Solr 实例的 url 列表,在您的情况下,这些 url 使用只能在 AWS 网络内访问的 IP 地址。

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

更新

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

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