Übersicht Lucene und solr

Lucene vs solr

  • Lucene ist das bekannteste und mächtigste Open-Source Werkzeug um Inhalte zu indexieren und zu durchsuchen. Lucene ist ein Suchmaschinen Framework
  • Lucene ist komplett in Java geschrieben
  • Solr ist eine zusätzliche Software, die eine Webschnittstelle zur Erstellung / Abfrage eines Lucene Indexes bietet

Geschichte von Lucene und solr

Geschichte von Lucene

Doug Cutting ist der der Erfinder von Lucene. Dieser hat auch die Entwicklung von Apples Suchhilfe „Sherlock“ geleitet. Seit Mitte Februar 2005 ist Lucene ein Top-Level-Apache-Projekt. Sehr viele namhafte Firmen und Projekte setzen Lucene ein und deshalb ist auch die Weiterentwicklung garantiert.

 

Geschichte von Solr

Solr wurde als Inhouse Projekt bei CNET 2004 gestartet. 2006 wurde der Quellcode an die Apache Foundation gespendet. Seither wurde es stetig weiterentwickelt. Es gibt viele Committer für das Projekt. Der Release der neusten Version 1.4 steht kurz bevor. Die empfohlene Version ist 1.3.

 

Architektur

  • Lucene stellt Werkzeuge zum Indexieren von Inhalten bereit.
  • Die Architektur von Lucene ist so aufgebaut, dass beliebige Filter verwendet werden können. Im Grunde kann alles verarbeitet werden, was in Textform vorliegt, also beispielsweise Text-Dateien, Datenbankfelder oder E-Mails.
  • Wer Inhalte in Formaten wie HTML, PDF, Microsoft Word oder OpenOffice verarbeiten möchte, benötigt Filter, die Text-Informationen extrahieren. Sie jedoch kein Bestandteil des Frameworks nicht integraler Bestandteil von Lucene, sondern können über diverse andere Projekte verfügbar beigezogen werden z.B. PDFBox für PDF, Apache POI für Microsoft Word etc.).

 

 

Textanalyse

Wenn die eigentlichen Textinhalte vorliegen, werden sie einem so genannten Analyzer übergeben.
Die Daten werden zerlegt und in einer einheitlichen Weise für den Index aufbereitet. Dabei können Stoppwörter eliminiert oder Zeichenketten in Kleinschreibung normalisiert werden.
Lucene stellt dazu verschiedene Analyzer bereit. Diese genügen auch komplexen Anforderungen vollends. Es ist jedoch auch möglich, zusätzliche und eigene Analyzer einzubinden
Einen passenden Analyzer vorausgesetzt, lassen sich mit Lucene übrigens auch hierzulande ungewohnte Zeichensätze, wie sie im Chinesischen oder Japanischen üblich sind, hervorragend indexieren.

Indexierung

Nach der Analyse erfolgen die eigentliche Indexierung und das Abspeichern des aufbereiteten Suchraums. Lucene unterscheidet die Indexfelder

  • indexed = Feld ist durchsuchbar
  • tokenized = Eingabestream wurde durch den Analyzer normalisiert
  • stored = der Originalwert des Feldes wird im Index abgespeichert

Diese Attribute lassen sich miteinander kombinieren.

Suchabfragen / Suchtypen

Lucene kennt

  • Term- und Phrasensuche (‚wort‘ ‚das ist eine Phrase‘)
  • Boolesche Operatoren (AND, OR)
  • Wildcard-Suche
  • Range-Queries (Bereichsanfragen)
  • Fuzzy- und Proximity-Suche

Diese Übermittlung der Suchbegriffe lässt sich am einfachsten mit einer Such API lösen.Apache Solr bietet eine solche Schnittstelle an.

Dabei werden nicht nur die Suchbegriffe, sondern auch noch eine Vielzahl zusätzlicher Parameter übergeben, z.B. ob die Ausgabe ein Highlighting des Suchbegriffs beinhalten soll oder ob ein Spellchecker Vorschläge liefern soll. Die Suchparameter werden als GET Parameter an den Solr Webdienst übermittelt.

Der Query Parser von Solr bzw. von Lucene lehnt sich mit seiner Syntax stark an Googles Anfragesprache an. Aus dem Query wird ein Anfrageobjekt erzeugt, das anschliessend an einen Index-Searcher übergeben. Dieser führt die Suche durch und liefert die Ergebnisse. Aus Performance-Gründen liefert Solr nicht alle Treffer aus dem Index, sondern nur eine begrenzte Anzahl der besten Ergebnisse.

Solr im Detail

Schnittstellen zu Solr

Nennenswerte Solr Clients existieren für PHP (Drupal), JSON (Javascript / Ajax) und .NET (solrNet)

Die Grund -API von Solr ist eine GET / POST Schnittstelle. 

Performance und Skalierbarkeit

Verteilte Server

http://wiki.apache.org/solr/CollectionDistribution

Solr unterstützt eine Master / Slave Anordnung. Der Masterserver erhält die Update / Deleteanfragen und die Slaves erhalten die Suchanfragen. Diese Liefern das Suchergebnis aus. Dabei wird der Index vom Master Server auf die Slave Server gespiegelt. Dies wird als CollectionDistribution bezeichnet. Der Name hat folgende Bedeutung:

 
  • Collection = Der Suchindex von Lucene besteht aus einer Sammlung von Dateien (Index-Dateien)
  • Distribution = Diese Index wird auf zusätzliche Server gespiegelt

Der Index von Lucene ist so clever aufgebaut, dass zusätzliche Dateien im Index in neue Dateien aufgenommen werden. Beim Spiegeln mir rsync werden nur die neuen Dateien kopiert. Falls ein Dokument aus dem Index gelöscht wird, erhält es ein „deleted“ flag und wird erst dann aus der Indexdatei gelöscht wenn der die Collction optimiert wird. Sinnvollerweise geschieht dies zu einem Zeitpunkt wo der Index nicht stark ausgelastet ist.

Verteilte Suche / Geteilte Indexe

http://wiki.apache.org/solr/DistributedSearch

In der neusten Version unterstützt Solr auch geteilte Indexe. Solr unterstützt nur horizontale Trennungen eines Indexes, d.h. wenn ein Index extrem viele Zeilen enthält kann ein Teil der Zeilen auf einen zweiten Server ausgelagert werden. Dies wird jedoch erst in der neusten Version unterstützt und hat einige grosse Nachteile. Beispielsweise wird keine Facettensuche unterstützt.