TurboSQL Guide

Volltext Suche

Previous  Top  Next

Volltextsuche ist die Suche nach einem beliebigen Wort in einem Datensatz. Diese Art der Suche ist für Memo- und WideMemo-Felder besonders nützlich, in denen das Suchen mit herkömmlichen Operatoren und Funktionen nicht das erwartete Resultat liefert oder zu lange dauert.

Die Volltextsuche unterliegt zwei Einschränkungen:

Es muss einen Volltext-Index für die Tabelle geben.
Eine Volltextsuche bezieht sich immer auf genau eine Tabelle (Es können aber mehrere Volltext-Suchbedingungen in einer WHERE-Klausel sein.).

Die Basis eines Volltext-Index ist das Wörterbuch, das eine normale Datenbank-Tabelle mit einem bestimmten Schema ist. Es enthält die Informationen über indizierte Wörter, ausgeschlossene Wörter, Wort-Relevanz, u.s.w. Sobald das Wörterbuch besteht, kann es für eine beliebige Zahl von Volltext-Indexen auf einer oder auf mehreren Tabellen benutzt werden.

Ab TurboDB 5, werden Volltext-Suchbedingungen in die WHERE Klausel der Abfrage eingebettet:

select * from SOFTWARE join VENDOR on SOFTWARE.VendorId = VENDOR.Id
where VENDOR.Country = 'USA' and (contains('office' in SOFTWARE.*) or contains('Minneapolis' in VENDOR.*))

Eine einfache Volltext-Suchbedingung sieht so aus:

contains('office -microsoft' in SOFTWARE.*)

die zutreffend ist, wenn irgendein Feld des Standard-Volltext-Index der Tabelle SOFTWARE das Wort office aber nicht das Wort microsoft enthält. Wenn sich die Abfrage auf nur eine Tabelle bezieht, kann dieses auch so geschrieben werden:

contains('office -microsoft' in *)

Wenn der Volltext-Suchausdruck mehr als ein Wort ohne den Bindestrich enthält, sucht TurboDB nach Datensätzen, die alle gegebenen Wörter enthalten.

contains('office microsoft' in SOFTWARE.*)

wird daher Datensätze finden, die beide Wörter, office und microsoft, in einem Feld des Standard-Volltext-Index der Tabelle enthalten.

Nach Wörter, die durch ein Pluszeichen getrennt sind, wird alternativ gesucht. Das Prädikat

contains('office star + open' in SOFTWARE.*)

findet Datensätze, die das Wort office und entweder star oder open beinhalten (oder beide).

Die Auswertung einer Volltext-Suchbedingung kann auch auf eine Untermenge der indizierten Spalten beschränkt werden:

contains('office' in SOFTWARE.Name, SOFTWARE.Category)

findet alle Datensätze die das Wort office entweder in der Spalte Name oder in der Spalte Category enthalten. Sollte der Volltex-Index außerdem noch die Spalte Description indizieren, wird ein Datensatz nicht geliefert der office nur in Description enthält. Generell wird die Suchbedingung gegen ndie Gesamtheit der angegebenen Spalten ausgewertet. Enthält die Bedingung einen Ausschlussterm wie in:

contains('office -microsoft' in Name, Category)

darf das Wort microsoft weder in Name noch in Category enthalten sein, falls es aber in Description auftaucht, kann der Datensatz trotzdem Teil der Ergebnismenge sein.

Hinweise

Volltext-Indexe können mit der TurboSQL Anweisung CREATE FULLTEXTINDEX , mit einem der Datenbank-Management Werkzeuge (wie TurboDB5Viewer) oder mit den entsprechenden Methoden der jeweiligen TurboDB Komponenten erstellt werden.

Von TurboDB Tabellen-Level 3 auf Level 4 hat sich die Technologie der Volltext-Indizierung geändert. Die neue Implementierung ist sehr viel schneller und erlaubt sowohl gewartete Indexe als auch Relevanzen. Es wird dringend empfohlen Tabellen-Level 4 zu verwenden, wenn mit Volltext-Indexen gearbeitet werden soll. Die alte Volltextsuche wird zukünftig eventuell entfernt.