Solr Spring Client Integration
Da sich mit der Solr ab Version 5 unter anderem die Namensgebung für die Kommunikation mit einem Solr Server, von Solr Server auf Solr Client geändert hat, bieten wir für unsere Integration des Solr Client in Spring eine neue SolrClientFactory an. Für die Integration von Solr bis Version 4 bitte die SolrServerFactory verwenden. Weitere Änderungen können unter Migration von Solr 4 nach Solr 5 nachgelesen werden.
Integration der Spring basierten SolrClientFactory für die Kommunikation mit Solr Servern
Wie auch schon bei unserer SolrServerFactory werden von unserer SolrClientFactory verschiedene Präfixe in der Url unterstützt:
- Um einen EmbeddedSolrServer zu starten: file://
- Eine Verbindung mit einem HttpSolrClient: http://
- Die Kommunikation mit einem Cluster mittels CloudSolrClient: cloud://
Die Konfigurationen der Url Präfixe für die SolrClientFactory im Detail
Die SolrClientFactory muss wie folgt initialisiert werden um ein Solr embedded zu starten:
SolrClientFactory solrClientFactory = new SolrClientFactory(); solrClientFactory.setUrl("file:///tmp/solr-spring-client/embedded-test-core"); solrClientFactory.setEmbeddedSolrConfigurationDir("./src/test/resources/solr/test-core"); solrClientFactory.initialize(); SolrClient solrClient = solrClientFactory.getObject(); QueryResponse response = solrClient.query(new SolrQuery("*:*")); ... solrClient.close(); solrClientFactory.destroy();
Das Verzeichnis für das EmbeddedSolr wird in Zeile 2 konfiguriert. Hier haben wir ein absolutes Verzeichnis verwendet, es kann natürlich auch ein relatives angegeben werden.
In der dritten Zeile wird ein relatives Verzeichnis für die Konfiguration des Solr-Cores angenommen.
Darin befinden sich alle notwendigen Konfigurationsdateien
In diesem Verzeichnis befinden sich die notwendigen Konfigurationsdateien für einen Solr-Core:
- solrconfig.xml
- schema.xml
Mittels dieser Konfiguration ist es möglich einen SolrClient mit der SolrClientFactory zu erstellen. Der SolrClient kann dann für die Kommunikation mit Solr verwendet werden.
Es kann auch ein bestehender Index verwendet werden, dazu muss lediglich das übergeordnete Verzeichins des Index-Verzeichnis angegeben werden.
Mittels setEmbeddedSolrConfigurationDir wird der Pfad zu der Core Konfiguration angegeben und mit setUrl das Datenverzeichnis.
Damit man sich mit einem Solr auf einem anderen Server verbinden kann, wird die SolrClientFactory wie folgt initialisiert:
SolrClientFactory solrClientFactory = new SolrClientFactory(); solrClientFactory.setUrl("http://localhost:8983/test-core"); solrClientFactory.initialize(); ...
Es muss nur die Url zu einem Solr-Core angegeben werden.
Die Konfiguration für die Kommunikation mit einem SolrCloud Cluster:
SolrClientFactory solrClientFactory = new SolrClientFactory(); solrClientFactory.setUrl("cloud://zkHost1:2181,zkHost2:2182?collection=test-collection"); solrClientFactory.initialize(); ...
Die Syntax zkHost1:2181,zkHost2:2182 in der markierten Zeile gibt die zu verwendenden ZooKeeper Instanzen an. Darauf folgt der Name der Collection.
Da es für die Reduzierung des Kommunikationsaufwands mit einer SolrCloud wichtig ist, welcher Solr Node der Leader für die Collection ist, werden die ZooKeeper Instanzen aufgelistet, da bie diesen der Leaderinformation angefragt wird.
[call-to-action-consulting /]
Die Spring Integration des Solr Client mittels XML
Die Beispielkonfiguration der SolrClientFactory als Spring Bean mittels XML ist wie folgt möglich:
... <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>app.properties</value> </list> </property> </bean> <bean name="solrClientFactory" class="com.indoqa.solr.spring.client.SolrClientFactory"> <property name="url" value="${solr.url}" /> <property name="embeddedSolrConfigurationDir" value="${solr.embedded-solr-configuration-dir}" /> </bean> ...
Die Parameter konfiguriert in der Properties Datei:
solr.url=file://./target/solr/embedded-test-core solr.embedded-solr-configuration-dir=./src/test/resources/solr/test-core
Um die Parameter in verschiedenen Umgebungen unterschiedlich zu konfigurieren, können diese in eigene Properties ausgelagert werden.