2017-04-20 4 views
0

Ich versuche, eine Verbindung zu einer Instanz von Solr herzustellen, die ich auf einem EC2 Ubuntu AMI ausgeführt habe. Ich habe die Ports 7574, 8982 und 9983 für solr geöffnet. Ich kann die Konsole gut sehen. Ich verwende Solrj, um eine Verbindung zu meiner Instanz herzustellen und versuche, ein Solr-Dokument mit einem Feld zu schreiben.Solrj kann keine Verbindung zu AWS EC2-Box mit 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(); 

Von der Solr Admin-Konsole kann ich die leere Sammlung sehen. Nach 5 Wiederholungen bekomme ich diesen Fehler.

org.apache.solr.client.solrj.SolrServerException: Keine Live-SolrServers Verfügung, um diese Anforderung zu behandeln: [http://internal-ip:8983/solr/collection, http://internal-ip:7574/solr/collection]

Verursacht durch: java.net.ConnectException: Connection timed out: connect

Ich bin verwirrt, warum die interne IP-Adresse in der Fehlermeldung angezeigt wird und warum sie im Allgemeinen keine Verbindung herstellen kann.

Ich begann Solr mit dem Befehl ./solr -e cloud -noprompt

Java 8

Antwort

0

auf Ihre Frage Suche ich nehme an, Sie laufen Solr in AWS EC2 Instanz und Sie verwenden Solrj mit Solr von Ihrem lokalen Computer zu interagieren .

Der Befehl ./solr -e cloud startet einen SolrCloud-Cluster auf Ihrer lokalen Arbeitsstation. Das vom Skript erstellte Netzwerk hat eine Topologie, die nicht mit Ihren Anforderungen kompatibel ist. Starten von Solr in eigenständigen Geschmack (./solr start) sollten Sie remote mit weniger Schmerzen verbinden können.

In diesem Fall haben Sie HttpSolrClient zu verwenden:

String urlString = "http://remote-ec2-ip-address:8983/solr/yourcollection"; 
SolrClient solr = new HttpSolrClient.Builder(urlString).build(); 

Wenn Sie Solr in SolrCloud Modus starten, die Solrj Client Verwendung Zookeeper zu entdecken Solr Endpunkte für SolrCloud Sammlungen.

Aber Zookeeper gibt eine Liste der URLs für jede Solr-Instanz an den Client zurück, und in Ihrem Fall verwenden diese URLs eine IP-Adresse, die nur innerhalb des AWS-Netzwerks erreichbar ist.

Aus diesem Grund können Sie keine Remoteverbindung herstellen.

aktualisiert

Um klar zu sein, falls Sie SolrCloud Sinn machen nur, wenn Sie eine Enterprise-Konfiguration benötigen, wenn Sie Millionen von Anfragen haben zu dienen und/oder Milliarden von Dokumenten in suchen.

Ein Cluster bedeutet auch viele EC2-Instanzen in der Regel 3 (oder mehr) Solr-Instanzen und 3 (oder 5) Zookeeper-Instanzen.

+0

Vielen Dank für Ihren Vorschlag. Ich werde den HttpSolrClient ausprobieren, aber wenn ich im SolrCloud-Modus laufen wollte, was müsste ich einstellen? Ich habe eine andere Webseite gesehen, die das Hinzufügen von serverip1: 2181, serverip2: 2182, serverip3: 2183 zur solr.xml – Kevin

+0

Die SolrCloud-Konfiguration, die Sie aus der Ferne verbinden müssen, muss manuell durchgeführt werden Es ist keine leichte Sache. Um zu beginnen, schlage ich vor, einen Blick darauf zu werfen: https://github.com/freedev/solrcloud-zookeeper-docker – freedev

Verwandte Themen