Seit den 70-er Jahren Datensuche hierarchisch, später relational. Das Speichern und Suchen war eine eigene Applikation. Mit dem Aufkommen der viel grösseren Datenmengen im Internet und dem unstrukturierten Vorkommen entstanden neue Anforderungen an die Suche.
Die Entwicklung «No-SQL» (Not Only SQL) spiegelt die Entwicklung in Richtung nicht-relationale Datenbanken. Die Daten werden nicht mehr auf bestimmte Strukturen abgebildet, sondern indexiert abgelegt. Die Applikationen zum speichern von grossen Datenmengen (humongus) und das Suchen wurden getrennt.
Die Open-Source Lucene-Suche von LucidWorks basiert auf der Suche nach Dokumenten. Diese werden via term-vectors indexiert. Auf die indizierten Dimensionen kann man Suchabragen starten. Verschiedene Typen sind via Schema hinterlegbar wie Text, deutscher Text, Umlaute, etc. Alle Dimensionen sind in einem Index hinterlegt, damit wird die Suche viel performanter, da man über den Index sucht und nicht über die Dokumente.
Suchabfragen per SQL fragen nach Inhalten in bestimmten Tabellen. Damit kann man sehr schnell «leere» Resultatlisten produzieren: «Kein Resultat gefunden». Erweitert man dann die Suche, so erscheinen potentiell viele unerwünschte Resultate.
Suchmaschinen suchen neu auch basierend auf statistischen Werten. Zusätzlich mit der Sortierung nach Relevanz wird die Trefferliste viel präziser. Die Kriterien «precision» und «recall» bezeichnen die Treffergenauigkeit und den Umfang der Resultate bezüglich der Gesamtmenge an gesuchten Daten.
Lucene stellt die Infrastruktur bereit für die Suche auf den inverted Index. Solr ist ein GUI-Framework und Search-Server, der den Zugriff auf Lucene via API erleichtert.
Solr Home ist die Heimat der Such-Cores. In den Schemata sind die durchsuchbaren Dimensionen hinterlegt. Auch Synonym-Dateien, Mapping-Files für Umlaute, etc sind auch im Solr Home abgelegt. Diese können von den Schemata angezogen werden.
Beim Indexieren werden Dokumente in die Lucene Filestruktur abgelegt. Nur nach vordefinierten Dimensionen kann später auch gesucht werden. Dokumente werden in XML oder JSON konvertiert und dann in Lucene abgelegt. Beispiel «Drinking a Latte» wird gestemmt abgelegt unter «Drink» / «Latte», um die Begriffe universell auffindbar zu machen.
Analyzer, Filter oder Tokenizer sind ähnliche Funktionen, die Inhalte aufnehmen, analysieren und wieder ausgeben. Damit können z.B. Synonyme ergänzt, Wörter gestemmt oder Umlaute umformatiert werden Beispiel «Fox». Anhand der verschienen Analyzer kann später identifiziert werden, wie eine Suche bezüglich Wortreihenfolge eingegeben wurde (Shingles).
SolrJ ist ein Java-Modul, das Daten an Solr sendet, dort wird abgearbeitet und dann per http in Lucene abgelegt. Die Daten können aber auch via XML, JSON oder eigene Formate eingespiesen werden. Alternativ kann ein DataImport-Handler eingesetzt werden. Er ist performanter als SolrJ und holt sich Daten bei Bedarf auch aus dem Web, RSS, Filestrukturen. Ist dieser allerdings beschäftigt, können keine weiteren Requests abgearbeitet werden.
Lucene / Solr Such-Features
- Eines der wichtigen Feature ist die «Facettierte Suche» (Guided Navigation).Die Facettierte Suche erlaubt den Drill-Down innerhalb einer Trefferliste. Anhand der neu erscheinenden Treffer wird die Navigation angepasst und nur noch Dimensionen angezeigt, die noch Treffer bringen. «Kein Resultat gefunden» ist dann nicht mehr möglich: Gibt es bestimmte Suchkombinationen, die keine Treffer ergeben würden, so werden die entsprechenden Suchdimensionen bereits vorher ausgeblendet.
Die Facetten sind auch hierarchisch konfigurierbar, z.B. bei geographischen sortierten Daten.
- Die Geo / Spacial Suche erlaubt Suche nach Distanzen, wenn Geo-Daten hinterlegt sind
- Query-Types erlaubt eine Fuzzy Suchabfrage mit unscharfer Suche oder AND/OR/NOT Operatoren oder * Wildcards.Per Boosting können bestimmte Dimensionen höher gewichtet werden als andere, um die Relevanz zu beeinflussen.
Auch eine Phrase Slope Suche ist möglich: Es berücksichtigt gesuchte Wörter, die nicht gerade nebeneinander stehen
- Highlighting hebt gesuchte Begriffe in der Trefferliste hervor
- Spell-Check visualisiert alternative Schreibweisen basierend auf Wörterbüchern oder den Index. Letzteres hat den Vorteil, dass die automatisch vorgeschlagenen Begriffe effektiv auch als Treffer vorkommen. Nutzt man Wörterbücher, so wir der Spell-Check zwar korrekt sein, allenfalls kommt aber das vorgeschlagene Wort nicht tatsächlich im Index vor und man muss eine leere Trefferliste zurückgeben, obwohl man dem User einen Gegenvorschlag unterbreitet hat…Der Boundary-Scanner identifiziert Satzanfänge und -Ende, um die zurückgegebenen Text-Snippets nicht am falschen Ort abzuklemmen.
Der Fraglist-Builder erstellt eine Liste der Highlights, z.B. aus Titel und Content von Inhalten
- Auto-Completion ergänzt Suchabfragen bereits beim Eintippen.Die Query Log Completion von Google berücksichtigt auch Suchabfragen von andern Usern und schlägt diese während des eintippens an
- More-Like-This zeigt ähnliche Resultate basierend auf einer erweiterten Hintergrund-Suche nach vordefinierten Dimensionen, z.B. alle Produkte desselben Anbieters oder alle Produkte in derselben Region je nach Konfiguration.Es kann definiert werden, dass Keywords nicht relevant sind, wenn sie in 50% der andern Dokumente vorkommen. Ein guter Oberwert für relevante Keywords liegt bei einem Vorkommen bis zu 17%
- Filtering / Filter Queries ermöglichen ein Rating der Resultate per Score: Diese Bewertung der Relevanz kann herangezogen werden, um Trefferlisten nach einer bestimmten Anzahl relevanter Treffer abzuschneiden.
Solr wird als Client/Server-Setup konfiguriert. Damit können kundenspezifische Resultatlisten konfiguriert werden. Auch kann man die eigene Implementation so gegen Software-Releases von Lucene/Solr abkapseln.
Einzelne Request-Handlers können mit oder ohne Facettierung konfiguriert werden.
Auch verschiedene Parser sind verfügbar, die dann u.a. Shingles indentifizieren: Suchabfragen mit mehreren Suchwörtern werden zuerst auf die beiden ersten Wörter, dann auf die beiden ersten und das dritte, etc. durchgeführt.
Auch Statistiken über die Suchabfragen werden automatisch ausgelöst.
Ein Admin User Interface von Solr erlaubt einen grafisch orientierten Zugang auf die Konfiguration. Man kann evaluieren, ob bestimmte Begriffe zueinander matchen werden, welche Werte im Index abgelegt sind, etc. Dies kann für das Debugging von Implementationen sehr hilfreich sein.