In der st_mysql_plugin
-Struktur, die eine
allgemeine Plug-In-Deklaration definiert, verweist der
Bestandteil info
auf einen typspezifischen
Plug-In-Deskriptor. Bei einem Volltext-Parser-Plug-In
entspricht dieser Deskriptor der
st_mysql_ftparser
-Struktur in der
plugin.h
-Datei:
struct st_mysql_ftparser { int interface_version; int (*parse)(MYSQL_FTPARSER_PARAM *param); int (*init)(MYSQL_FTPARSER_PARAM *param); int (*deinit)(MYSQL_FTPARSER_PARAM *param); };
Wie die Strukturdefinition zeigt, hat der Deskriptor eine
Versionsnummer
(MYSQL_FTPARSER_INTERFACE_VERSION
für
Volltext-Parser-Plug-Ins) und enthält Zeiger auf drei
Funktionen. Die Bestandteile init
und
deinit
sollten auf eine Funktion verweisen
oder auf 0 gesetzt werden, wenn die Funktion nicht gebraucht
wird. Der Bestandteil parse
muss auf die
Parse-Funktion verweisen.
Ein Volltext-Parser-Plug-In wird für zwei Dinge verwendet: Indizierung und Suchoperationen. In beiden Fällen ruft der Server die Initialisierungs- und Deinitialisierungsfunktion am Anfang und am Ende der Verarbeitung jeder SQL-Anweisung auf, in der das Plug-In benutzt wird. Während der Verarbeitung der Anweisung ruft der Server die Parsing-Hauptfunktion jedoch kontextabhängig auf:
Zum Indizieren ruft der Server den Parser für jeden zu indizierenden Spaltenwert auf.
In Suchoperationen ruft der Server den Parser auf, um den
Such-String zu parsen. Ebenso kann der Parser für Zeilen
aufgerufen werden, die von der Anweisung verarbeitet
werden. Im Modus für natürliche Sprache braucht der
Server den Parser nicht aufzurufen. Ini Phrasensuchen im
booleschen Modus oder Suchen in natürlicher Sprache mit
Abfrageerweiterung (Query Expansion) wird der Parser
eingesetzt, um in den Spaltenwerten Informationen zu
parsen, die nicht im Index vorliegen. Wenn eine Suche nach
einer Spalte mit FULLTEXT
-Index im
booleschen Modus durchgeführt wird, wird ebenfalls der
eingebaute Parser aufgerufen. (Plug-Ins sind mit konkreten
Indizes verbunden. Ist kein Index vorhanden, wird auch
kein Plug-In verwendet.)
Beachten Sie, dass die Plug-In-Deklaration im Plug-In-Bibliotheksdeskriptor Initialisierungs- und Deinitialisierungsfunktionen hat, ebenso wie der Plug-In-Deskriptor, auf den sie verweist. Diese Funktionspaare dienen unterschiedlichen Zwecken und werden aus unterschiedlichen Gründen aufgerufen:
Für die Plug-In-Deklaration im Plug-In-Bibliotheksdeskriptor werden die Initialisierungs- und Deinitialisierungsfunktionen beim Laden und Entladen des Plug-Ins aufgerufen.
Für den Plug-In-Deskriptor werden die Initialisierungs- und Deinitialisierungsfunktionen für jede SQL-Anweisung aufgerufen, in der das Plug-In benutzt wird.
Jede API-Funktion, die im Plug-In-Deskriptor genannt ist,
sollte null bei einem Erfolg und einen von null verschiedenen
Wert bei einem Misserfolg zurückgeben, und jede sollte ein
Argument entgegennehmen, das auf eine
MYSQL_FTPARSER_PARAM
-Struktur verweist, die
den Parsing-Kontext enthält. Die Struktur ist wie folgt
definiert:
typedef struct st_mysql_ftparser_param { int (*mysql_parse)(void *param, byte *doc, uint doc_len); int (*mysql_add_word)(void *param, byte *word, uint word_len, MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); void *ftparser_state; void *mysql_ftparam; CHARSET_INFO *cs; byte *doc; uint length; int mode; } MYSQL_FTPARSER_PARAM;
Die Bestandteile der Struktur werden folgendermaßen benutzt:
mysql_parse
Ein Zeiger auf eine Callback-Funktion, die den eingebauten
Parser des Servers aufruft. Diesen Callback verwenden Sie,
wenn das Plug-In als Frontend des eingebauten Parsers
fungiert. Wenn also die Plug-In-Parsing-Funktion
aufgerufen wird, soll sie die Eingabe verarbeiten, um den
Inhalt zu extrahieren, und diesen dann an den
mysql_parse
-Callback übergeben.
Der erste Parameter dieser Callback-Funktion sollte der
mysql_ftparam
-Teil der Struktur des
Parsing-Kontextes sein. Das heißt: Wenn
param
auf die Struktur verweist, wird
der Callback folgendermaßen aufgerufen:
param->mysql_parse(param->mysql_ftparam, ...);
Ein Frontend-Plug-In kann Text extrahieren und komplett oder häppchenweise an den eingebauten Parser übergeben. Im zweiten Fall behandelt der eingebaute Parser die Textstücke, als befänden sich implizite Wortgrenzen zwischen ihnen.
mysql_add_word
Ein Zeiger auf eine Callback-Funktion, die einem
Volltextindex oder der Liste der Suchbegriffe ein Wort
hinzufügt. Diesen Callback verwenden Sie, wenn das
Parser-Plug-In den eingebauten Parser ersetzen soll. Das
bedeutet: Wenn die Parsing-Funktion des Plug-Ins
aufgerufen wird, soll sie die Eingabe in Wörter parsen
und für jedes Wort den
mysql_add_word
-Callback aufrufen.
Der erste Parameter dieser Callback-Funktion soll der
mysql_ftparam
-Teil der Struktur des
Parsing-Kontexts sein. Das heißt: Wenn
param
auf die Struktur verweist, wird
der Callback wie folgt aufgerufen:
param->mysql_add_word(param->mysql_ftparam, ...);
ftparser_state
Dies ist ein generischer Zeiger. Das Plug-In kann ihn auf die Informationen verweisen lassen, die es intern für seine eigenen Zwecke benutzt.
mysql_ftparam
Wird durch den Server eingestellt und als erstes Argument
an den mysql_parse
- oder
mysql_add_word
-Callback übergeben.
cs
Verweist auf den Zeichensatz für den Text, oder auf 0, wenn diese Information nicht zur Verfügung steht.
doc
Ein Zeiger auf den zu parsenden Text.
length
Die Länge des zu parsenden Texts in Bytes.
mode
Der Parsing-Modus. Dieser Wert ist eine der folgenden Konstanten:
MYSQL_FTPARSER_SIMPLE_MODE
Parsen im schnellen, einfachen Modus. Dies wird für Indizes und für Anfragen mit natürlichen Sprachen verwendet. Der Parser sollte an den Server nur die zu indizierenden Wörter übergeben. Wenn er Längenbeschränkungen oder eine Liste mit zu ignorierenden Stoppwörtern verwendet, soll er die hierdurch ausgeschlossenen Wörter nicht an den Server übergeben.
MYSQL_FTPARSER_WITH_STOPWORDS
Parsen im Stoppwortmodus. Dies wird bei booleschen Suchoperationen für den Abgleich von Begriffen verwendet. Der Parser sollte alle Wörter an den Server übergeben, auch Stoppwörter oder Wörter, die die normalen Längenbeschränkungen übersteigen.
MYSQL_FTPARSER_FULL_BOOLEAN_INFO
Parsen im booleschen Modus. Wird zum Parsen von
booleschen Anfrage-Strings genutzt. Der Parser soll
nicht nur Wörter, sondern auch Operatoren für den
booleschen Modus erkennen, und diese als Token mit dem
mysql_add_word
-Callback an den
Server übergeben. Um dem Server zu sagen, welche Art
von Token übergeben wird, muss das Plug-In eine
MYSQL_FTPARSER_BOOLEAN_INFO
-Struktur
ausfüllen und einen Zeiger auf diese Struktur mit
übergeben.
Wenn der Parser im booleschen Modus aufgerufen wird, hat
param->mode
den Wert
MYSQL_FTPARSER_FULL_BOOLEAN_INFO
. Die
MYSQL_FTPARSER_BOOLEAN_INFO
-Struktur, die
der Parser zur Übergabe von Token-Informationen an den Server
benutzt, sieht folgendermaßen aus:
typedef struct st_mysql_ftparser_boolean_info { enum enum_ft_token_type type; int yesno; int weight_adjust; bool wasign; bool trunc; /* Diese sind im Parser-Zustand und müssen entfernt werden. */ byte prev; byte *quot; } MYSQL_FTPARSER_BOOLEAN_INFO;
Der Parser sollte die Bestandteile der Struktur folgendermaßen ausfüllen:
type
Der Token-Typ. Dies sollte einer der Werte der folgenden Tabelle sein:
Typ | Bedeutung |
FT_TOKEN_EOF |
Ende der Daten |
FT_TOKEN_WORD |
Ein normales Wort |
FT_TOKEN_LEFT_PAREN |
Beginn einer Gruppe oder eines Teilausdrucks |
FT_TOKEN_RIGHT_PAREN |
Ende einer Gruppe oder eines Teilausdrucks |
FT_TOKEN_STOPWORD |
Ein Stoppwort |
yesno
Gibt an, ob das Wort vorhanden sein muss, damit eine Übereinstimmung festgestellt wird. 0 bedeutet, dass das Wort optional ist, sein Vorhandensein jedoch die Relevanz der Übereinstimmung erhöht. Werte größer 0 bedeuten, dass das Wort obligatorisch ist, und Werte kleiner 0, dass es nicht vorhanden sein darf.
weight_adjust
Ein Gewichtsfaktor, der festlegt, wie viel eine
Übereinstimmung für das Wort zählt. Indem man diesen
Faktor herauf- oder heruntersetzt, beeinflusst man die
Bedeutung, die dieses Wort in Relevanzberechnungen hat.
Ist der Wert null, so erfolgt keine Anpassung der
Gewichtung. Werte größer oder kleiner null bedeuten ein
höheres oder geringeres Gewicht. Die Beispiele unter
Abschnitt 12.7.1, „Boolesche Volltextsuche“, die
<
- und
>
-Operatoren verwenden, zeigen, wie
Gewichtung funktioniert.
wasign
Das Vorzeichen des Gewichtungsfaktors. Ein negativer Wert
verhält sich wie der boolesche Suchoperator
~
, der dafür sorgt, dass das Wort in
negativer Weise zur Relevanz beiträgt.
trunc
Zeigt an, ob der Abgleich in derselben Weise durchgeführt
wird, als ob der Kappungsoperator *
im
booleschen Modus angegeben worden wäre.
Plug-Ins sollten nicht die Bestandteile
prev
und quot
der
MYSQL_FTPARSER_BOOLEAN_INFO
-Struktur
benutzen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.