Neben der Suche über eine gespeicherte Prozedur und den skalaren SQL-Suchfunktionen stellt Net Search Extender zwei SQL-Tabellenwertfunktionen (Table Valued Function = TVF) bereit, die der gespeicherten Prozedur stark ähneln.
Beide Tabellenwertfunktionen heißen db2ext.textsearch. Der einzige Unterschied besteht darin, dass eine Funktion die Funktion HIGHLIGHT unterstützt und zwei zusätzliche Parameter, numberOfHits und hitInformation, besitzt.
Hierbei ist zu beachten, dass die Tabellenwertfunktion für Tabellen mit einem zusammengesetzten Primärschlüssel nicht verwendet werden darf.
Informationen zur Verwendung der Funktion HIGHLIGHT finden Sie unter DB2EXT.HIGHLIGHT.
Anmerkung |
---|
Die Tabellenwertfunktion kann in einer verteilten DB2-Umgebung nur dann verwendet werden, wenn die Benutzertabelle in einem Tabellenbereich gespeichert wird, der sich komplett auf einem Knoten befindet. Außerdem müssen Sie über die Umgebungsvariable DB2NODE sicherstellen, dass Sie die Verbindung zum richtigen Knoten herstellen. |
Funktionssyntax
1. db2ext.textsearch ohne Unterstützung für HIGHLIGHT db2ext.textSearch ( query VARCHAR(4096), indexSchema VARCHAR(128), indexName VARCHAR(128), resultFirstRow INTEGER, resultNumberRows INTEGER, primKeyBinding <unterstützte typen>,// selber Typ wie Primärschlüssel ) return table ( primKey <unterstützte typen>,// selber Typ wie Primärschlüssel numberOfMatches INTEGER, score DOUBLE, totalNbResults INTEGER ) 2. db2ext.textsearch mit Unterstützung für HIGHLIGHT db2ext.textSearch ( query VARCHAR(4096), indexSchema VARCHAR(128), indexName VARCHAR(128), resultFirstRow INTEGER, resultNumberRows INTEGER, primKeyBinding <unterstützte typen>,// selber Typ wie Primärschlüssel numberOfHits INTEGER ) return table ( primKey <unterstützte typen>,// selber Typ wie Primärschlüssel numberOfMatches INTEGER, score DOUBLE, totalNbResults INTEGER hitInformation BLOB(20K) )
Funktionsparameter
Die Eingabeparameter sind folgende.
Beachten Sie, dass die Ziffer 0 die erste Zeile in der Abfrageergebnisliste kennzeichnet.
Beachten Sie, dass sich dieser Wert von dem Abfrageparameter zur Begrenzung des Ergebnisses unterscheidet, der die maximale Größe der Abfrageergebnisliste festlegt.
Darüber hinaus bestimmt der Parameter den Geltungsbereich der Textsuche. Wenn der Parameter primaryKeyBinding auf NULL ("CAST(NULL as <typ1>)" gesetzt wird, erstreckt sich der Geltungsbereich der Suche auf alle im Index gespeicherten Dokumente. Alternativ können Sie die Suche auf die Dokumente beschränken, an die sie durch den Parameter primaryKeyBinding gebunden wird.
Wenn primaryKeyBinding zum Beispiel auf den Wert CAST(5 as BIGINT) gesetzt wird, beschränken Sie die Suche auf ein einziges Dokument mit dem Primärschlüsselwert "5" des Typs BIGINT.
Beachten Sie, dass nur einspaltige Primärschlüssel der folgenden Typen unterstützt werden: SMALLINT, INTEGER, BIGINT, REAL, DOUBLE, VARCHAR FOR BIT DATA, DATE, TIME und TIMESTAMP.
Beachten Sie, dass dieser Parameter nur für die Erstellung der Hervorhebungsinformationen benötigt wird, die für die Funktion db2ext.highlight erforderlich sind.
Funktionsparameter
Die folgenden Rückgabewerte werden in einer temporären Tabelle gespeichert, die mit Ihrer normalen Tabelle verknüpft werden muss, wenn weitere Ergebnisse angefordert werden. Beachten Sie, dass die Werte für NUMBEROFMATCHES, SCORE, TOTALNUMBEROFRESULTS und HITINFORMATION nur berechnet werden, wenn sie in Ihrer SELECT-Anweisung angefordert werden.
Beachten Sie auch, dass diese Zahl nicht mehr zuverlässig ist, wenn Sie STOP SEARCH AFTER oder RESULT LIMIT zusammen mit der SCORE-Syntax in einer Abfrage verwenden.
Beachten Sie, dass dieser Wert nur zurückgegeben wird, wenn Sie einen Wert für numberOfHits angeben.
Mit Hilfe der SQL-Tabellenwertfunktion sind Sie in der Lage, Sichten in gleicher Weise zu durchsuchen, wie dies durch die Suche über eine gespeicherte Prozedur möglich ist. Jedoch ist kein gemeinsamer Speicher erforderlich, so dass der Index nicht aktiviert werden muss.
Diese Funktion ist in erster Linie für Benutzer gedacht, die eine SQL-Abfrage innerhalb der Suche über eine gespeicherte Prozedur verwendet haben. Eine Einschränkung besteht jedoch darin, dass nur ein einspaltiger Primärschlüssel für Basistabellen unterstützt wird.
Das folgende Beispiel zeigt den Umgang mit einer Tabelle mit einem mehrspaltigen Primärschlüssel:
select s.id from db2ext.sample s, table (db2ext.textSearch( '"characteristics"', 'DB2EXT', 'COMMANDS', 1, 20, cast(NULL as INTEGER))) t where s.id = t.primkey
In diesem Beispiel müssen Sie zunächst eine Sicht auf diese Tabelle mit einem eindeutigen einspaltigen Schlüssel und anschließend den Index für diese Sicht erstellen.
Ein Beispiel für die Verwendung der SQL-Tabellenwertfunktion mit der Funktion db2ext.highlight finden Sie auf Seite ***.