Solr Features
In diesem Artikel geben wir einen Überblick über die wichtigsten Features von Apache Solr und zeigen, für welche Aufgabengebiete ein Einsatz lohnenswert ist. Dies kann nur ein Ausschnitt aller Funktionen sein, die im Laufe der Jahre entstanden sind und immer noch entstehen. Die Möglichkeit eigene Erweiterungen mit wenig Aufwand einbinden zu können, bietet darüber hinaus zusätzliche Flexbilität.
Apache Solr Features im Überblick
Apache Solr ist eine Open Source Plattform für Enterprise Search (auf Deutsch: Unternehmensweite Suche) auf Basis von Apache Lucene. Die Kernfunktionalitäten Indexierung, Suche und Bewertung der zu durchsuchenden Daten wird durch Lucene übernommen, während Solr diese Funktionalitäten in einen WebServer kapselt, HTTP-basierte Schnittstellen bereitstellt und umfangreiche Zusatzfunktionen, sowie Konfigurations- und Erweiterungsmöglichkeiten anbietet.
2010 wurden Solr und Lucene zu einem Projekt bei der Apache Software Foundation zusammengeschlossen und haben ihre Entwicklungs- und Releasezyklen aufeinander abgestimmt. Dies ist unter anderem an den gleichlautenden Versionsnummer und der Namenskombination Solr/Lucene bzw. Lucene/Solr erkennbar.
Indexierung
Die Indexierung ist ein wesentlicher Aspekt bei der Unternehmensweiten Suche, da in der Regel nicht direkt in den ursprünglichen Datenquellen gesucht werden kann. Der Grund dafür ist häufig, dass die Daten in einem Format abgelegt sind, welches für eine effiziente Suche ungeeignet ist bzw. ein Vielzahl an unterschiedlichen Formaten unterstützt werden müsste. In anderen Fällen unterstützen die Datenquellen keine Suche oder sollen nicht zusätzlich belastet werden.
Solr/Lucene erlaubt es, die zu durchsuchenden Daten in einer einheitlich Form, dem Solr-Schema, zu beschreiben. Diese Beschreibung ähnelt einem Datenbankschema, das festlegt, welche Felder existieren und welche Datentypen diese haben. Während Datenbanken Datensätze enthalten, spricht man bei Solr/Lucene jedoch von Dokumenten.
Die einzelnen Dokumente werden gegen das Solr-Schema validiert und dann in einer zum Suchen optimierten Weise abgelegt. Dabei werden die einzelnen Felder des Dokuments gemäß dem Solr-Schema analysiert und das Ergebnis dieser Analyse in einem invertierten Index abgelegt, mit dem Suchvorgänge sehr effizient durchgeführt werden können. Falls das Schema es vorsieht, werden die Felder der Dokumente zusätzlich auch unverändert abgespeichert, um später wieder darauf zugreifen zu können.
Suche
Auf den einheitlichen Datenstrukturen aus der Indexierung können Suchvorgänge deutlich schneller ausgeführt werden, da nicht mehr einzelne Dokumente durchsucht werden müssen, sondern direkt über die invertierten Indexe aufgelistet werden. Bei der Suche geht es darum, Mengenoperationen schnell und effizient auf den Dokumentenlisten aus den invertierten Indizes durchzuführen, um die gesuchten Dokumente zu ermitteln. Als Abfragesprache dient eine eigenständige Syntax, die als Lucene Query bezeichnet wird.
Als Ausdrücke unterstützt Solr/Lucene
- Term Query: Einschränkung auf genau einen Wert bei einem Feld
z.B. für die Sprache “Deutsch”:sprache:Deutsch
- Wildcard Query: ein Wert mit Platzhalter bei einem Feld
z.B. für Sprachen, die mit F beginnen:sprache:F*
- Range Query: der Wert eines Feldes soll in einem bestimmten Bereich liegen
z.B. für alle Preise von einschließlich 10 bis einschließlich 20:preis:[10 TO 20]
z.B. für alle Namen von ausschließlich “Andreas” bis ausschließlich “Bernd”:
name:{Andreas TO Bernd}
- Fuzzy Query: der Wert eines Feldes soll dem Suchbegriff ähnlich sein
z.B. für die Themen “Tisch” oder “Tische”, aber auch “Fisch”thema:Tisch~
- Proximity Query: zwei Worte sollen nahe bei einander stehen
z.B. für “Sonne” und “Wind”, aber nur wenn diese nicht mehr als 5 Worte auseinander liegentext:"Sonne Wind"~5
Diese Ausdrücke können noch mit logischen Verknüpfungen kombiniert werden, z.B.
sprache:Deutsch AND preis:[* TO 15]
Darüber hinaus gibt es auch noch Spezialsuchen, die z.B. ähnliche Dokumente ermitteln können, eine geographische Suche erlauben oder Beziehungen zwischen Dokumenten berücksichtigen.
Bewertung
Die Bewertung der Dokumente im Suchergebnisse ist ein zentraler Faktor bei der Suche. Zur Ermittelung der Relevanz der einzelnen Treffer werden verschiedenen Kennzahlen, wie z.B. die Anzahl der Dokumente oder die Häufigkeit der Suchbegriffe, verwendet, um für jedes einzelne Dokument einen Score zu berechnen, der beschreibt, wie gut das Dokument zur Suchanfrage passt. Die Einflussmöglichkeiten reichen von Zusatzparametern in der Anfrage bis zu selbstprogrammierten Speziallösung in Form eines Plugins.
Facettierung
Bei der facettierten Suche werden keine Dokumente als Suchergebnis geliefert, statt dessen wird ermittelt, welche Feldwerte tatsächlich im Suchergebnis vorkommen und wie viele Dokumente den jeweiligen Wert haben. So kann ein Benutzer leicht einen Überblick über die Daten erhalten, indem er schnell sehen kann, wie sich die Dokumente z.B. nach Ländern, Sprachen oder Themen verteilen.
Clustering
Mit steigenden Datenmengen wird es immer schwieriger, alle Dokumente auf einem Server unterzubringen und Suchanfragen immer noch in akzeptabler Antwortzeit abzuarbeiten. Solr bietet dafür verschiedene Lösungsansätze. Der modernste und ausgereifteste ist Solr Cloud, das durch Apache ZooKeeper Server-Verbunde beliebiger Größe verspricht. Solr übernimmt hier nicht nur die gezielte Verteilung der Dokumente während der Indexierung, sondern sorgt auch dafür, dass Suchen und Bewertungen konsistent über den gesamten Datenbestand der Solr Cloud erfolgen. Abgerundet wird dies durch die Möglichkeit, den Verbund im laufenden Betrieb verändern und überwachen zu können.
Near Real Time Searching
Ein regelmäßig auftretendes Thema bei der Unternehmensweiten Suche ist die Zeitverzögerung, mit der ein Dokument auffindbar wird. Diese Verzögerung ergibt sich zum Einen aus dem Aufwand der notwendig ist, alle veränderten Daten zu speichern (dem Commit) und zum Anderen die veränderten Daten in die Suche mit einzubeziehen und dabei z. B. auch Caches zu invalidieren.
Solr/Lucene bietet die Möglichkeit, Soft Commits durchzuführen, mit denen die Suche auf alle vorhandenen Daten ausgeweitet wird, ohne diese zuvor auf den Hintergrundspeicher schreiben zu müssen. Das spart kostbare Zeit und reduziert die Verzögerung bis Änderungen sichtbar werden. Die veränderten Daten müssen trotzdem regelmäßig persistiert werden, allerdings kann dies ungestört im Hintergrund passieren, ohne die Suche direkt zu beeinflussen.
In Abhängigkeit von den Einstellungen der Caches, die bei einem Soft Commit unverweigerlich verloren gehen, können Dokumente so schon nach wenigen Sekunden nach der Indexierung gefunden werden.
Vervollständigen und Rechtschreibkorrektur
Natürlich können die indexierten Daten auch dazu verwendet werden, Benutzereingaben zu vervollständigen bzw. auf Fehler zu überprüfen. Dazu werden einfache statistische Auswertungen durchgeführt, um die wahrscheinlichsten Ergebnisse auszuwählen, die zur tatsächlichen Benutzereingabe passen. Durch konfigurierbare Analysen zum Zeitpunkt der Indexierung als auch der Abfrage, können gezielt Unterschiede bei Groß-/Kleinschreibung, Umlauten oder fehlenden Buchstaben erkannt und alternative Schreibweisen vorgeschlagen werden.
Gruppieren
Haben verschiedene Dokumente im Suchergebnis ähnliche Eigenschaften, kann dies dazu führen, dass es einem Benutzer schwerer fällt, das passende Dokumente zu finden. Für diesen Fall bietet Solr/Lucene das Feature Grouping, das Dokumente im Suchergebnis nach den Werten ihrer Felder gruppieren kann. Im Unterschied zur gleich lautenden Funktion bei Datenbanken können hier jedoch immer noch alle Dokumente der einzelnen Gruppen extrahiert werden, ohne eine Aggregation zu benötigen.
Binäre API
Als WebServer mit HTTP-basierter Schnittstelle bietet Solr/Lucene die Datenformate XML, JSON und CSV an, die gut geeignet sind, um mit Browsern, Konsolenprogrammen oder Scripting-basierten Oberflächen Daten zu konsumieren.
Für eine besonders effiziente Datenübertragung bietet Solr/Lucene allerdings auch SolrJ an, das mittels eines in Java geschriebenen Clients auf Basis von Apache HttpClient eine binäre API verwendet. Ein weiterer Vorteil von SolrJ ist die Möglichkeit, Suchanfragen ebenfalls über ein objektorientiertes Modell zu erstellen.
Admin UI
Da Solr/Lucene als eigenständiger WebServer läuft, spielen auch Zugriffs-, Steuer- und Überwachungsmöglichkeiten eine große Rolle. Das Admin UI bietet eine einfache Verwaltungsoberfläche auf Basis von Webseiten, um alle wichtigen Kennzahlen der Servers einzusehen, Abfragen zu stellen und statistische Informationen auszuwerten. Auch eine MultiCore Installation und ein Server-Verbund lässt sich damit problemlos einsehen. Für umfangreiche und tiefergreifende Änderungen und Einstellungen muss aber häufiger auf die Konsole zurückgegriffen werden.