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.
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.
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.
Nach der Analyse erfolgen die eigentliche Indexierung und das Abspeichern des aufbereiteten Suchraums. Lucene unterscheidet die Indexfelder
Diese Attribute lassen sich miteinander kombinieren.
Lucene kennt
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.
Nennenswerte Solr Clients existieren für PHP (Drupal), JSON (Javascript / Ajax) und .NET (solrNet)
Die Grund -API von Solr ist eine GET / POST Schnittstelle.
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:
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.
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.