Wie funktioniert Lucene/Solr erreichen hohe performance im multi-Feld / faceted search?

Kontext

Dies ist eine Frage, die vor allem über Lucene (oder vielleicht Solr) - Interna. Das Hauptthema ist facettierte Suche, in der die Suche kann passieren, entlang mehrerer voneinander Unabhängiger Dimensionen (Facetten) von Objekten (zum Beispiel Größe, Geschwindigkeit, Preis für ein Auto).

Bei der Implementierung mit relationaler Datenbank, für die eine große Anzahl von Facetten multi-Feld-Indizes sind nicht sinnvoll, da Facetten durchsucht werden können, in beliebiger Reihenfolge, so dass eine bestimmte bestellten multi-index verwendet wird, mit geringer chance, und die Erstellung aller möglichen Ordnungen von Indizes ist unerträglich.

Solr beworben wird, gut zu bewältigen mit der facettierten Suche Aufgabe, die, wenn ich glaube, richtig muss verbunden werden mit Lucene (angeblich) gut auf multi-Feld-Abfragen (wo die Felder eines Dokuments beziehen sich auf Facetten eines Objekts).

Frage

Den invertierten index von Lucene kann in einer relationalen Datenbank gespeichert, und natürlich nehmen die Schnittpunkte des übereinstimmenden Dokumente können auch trivial erzielt mit RDBMS mit single-Feld-Indizes.

Daher, Lucene hat angeblich einige fortgeschrittene Technik für multi-Feld-Abfragen als nur die Einnahme der Kreuzung von passenden Dokumenten basierend auf den invertierten index.

Ist also die Frage, was das für eine Technik/trick? Allgemein: Warum kann Lucene/Solr erreichen besser facettierte Suche Leistung theoretisch als RDBMS könnte (falls es so ist)?

Anmerkung: Meine erste Vermutung wäre, dass Lucene verwenden würden, einige space partitioning-Methode für die Partitionierung eines Vektorraums gebaut, aus dem Dokument die Felder als Dimensionen, aber so wie ich das verstehe Lucene ist nicht rein Vektorraum basiert.

InformationsquelleAutor ron | 2011-04-05
Schreibe einen Kommentar