Blog der SHI GmbH

Parametrisierung des DataImportHandlers

Wenn man Daten in Solr indexieren möchte, kommt man fast nicht um den DataImportHandler (DIH) herum. Der DIH ist eine zentrale Komponente in Solr, mit der eine Vielzahl von Datenquellen indexiert werden können, z.B. Datenbanken, Feeds oder das lokale Dateisystem. Dieser Artikel soll primär zeigen, wie man den Import von Daten von außen steuern bzw. konfigurieren kann. Hierzu möchte ich kurz ausholen und noch einmal schildern, wie der DIH standardmäßig genutzt wird.

Der DataImportHandler

Der wichtigste Bestandteil beim DataImportHandler ist die Konfiguration des DIH , die in eine XML-Datei ausgelagert ist. In dieser Datei werden Kombinationen von „datasource“ und „entities“ definiert, um eine spezifische Datenquelle zu indexieren und die Daten in das Solr Schema umzuwandeln.

Im obigen Beispiel sieht man einen Teil einer solchen Konfiguration. Diese Konfigurationen sind notwendig, um eine spezifische Datenquelle zu indexieren. Hierzu werden beispielsweise SQL Statements oder Pfade im Dateisystem (siehe Beispiel baseDir=“d:daten“) hart codiert eingetragen.

Es gibt jedoch oft Situationen, zum Beispiel im Testbetrieb, in denen nur ein spezieller Teil der Daten oder Daten aus einer anderen Datenquelle indexiert werden. Man könnte für solche Situationen natürlich unterschiedliche DIH-Skripte vorhalten, die jeweils bis auf einzelne Properties (baseDir) identisch sind. Dies macht natürlich die Pflege und Wartung dieses Skriptes recht aufwendig. Man könnte aber auch Parameter nutzen, um hier mehr Flexibilität zu erhalten und dies möchte ich nun mal zeigen.

Die Parametrisierung

Es gibt unterschiedliche Möglichkeiten wie man Parameter setzt; jede mit ihren eigenen Vor- und Nachteilen. Genutzt werden sie in de DIH Konfiguration immer auf die gleiche Weise. Hierfür gibt es eine spezielle Schreibweise: ${PARAMETER}. In der Konfiguration kann prinzipiell alles als Parameter umgesetzt werden sogar nur Teile, wie beispielsweise eine Where-Klausel bei einem Datenbank-Import.

Die erste Möglichkeit die ich für das Setzen eines Parameters vorstellen möchte ist die Möglichkeit einen JVM Parameter zu spezifizieren. Man kann mit dieser Variante eine Konfiguration des DIH vorbereiten, diese problemlos auf mehreren Umgebungen – Development, Test; Stage, Live – deployen und über den JVM Parameter bestimmen, welcher Pfad des Dateisystems indexiert werden soll. Einen solchen Parameter kann man beispielsweise beim Start vom Solr mitgeben, s.u.:

java -DmyPath=d:daten -jar start.jar

Die Anpassung der DIH Konfiguration sieht dann wie folgt aus:

Die zweite Möglichkeit, die Parameter in der solr.xml zu konfigurieren, ist vom Verwendungszweck her gesehen identisch mit der ersten. Auch hier hat man eine „zentrale“ Stelle – die solr.xml – in der man Konfigurationen durchführt.

Im obigen Beispiel wird über ein Property Tag der Parameter gesetzt, der dann von der DIH Konfiguration ausgelesen werden kann.

Die dritte Möglichkeit ist, eine solrcore.properties Datei im conf-Verzeichnis eines Solr Cores anzulegen, in dem man ebenfalls die Parameter hinterlegt. Der wesentliche Unterschied zu den beiden vorherigen Möglichkeiten ist, dass diese Konfiguration nicht für alle Cores einer Solr Instanz gilt, sondern nur für diesen einen Core.

Die vierte und die letzte Möglichkeit ist die flexibelste von allen. Man kann Parameter auch als Request-Parameter mitgeben. So kann man nicht nur für verschiedene Instanzen bzw. Cores frei agieren, sondern auch für unterschiedliche Einsatzzwecke in einem Core.

Ein Request für einen DeltaImport könnte dann wie folgt aussehen

https://localhost:8983/solr/dataimport?command=delta-import&myPath=d:daten

Möchte man diese Variante nutzen sieht die DIH Konfiguration wie folgt aus:

Weiterführende Informationen

Markus Klose