MySQL verfügt über einen eingebauten Parser, der nach Voreinstellung für Volltextoperationen eingesetzt wird (Text parsen, der indiziert werden soll, oder einen Anfrage-String parsen, um die Suchbegriffe herauszufinden). In der Volltextverarbeitung bedeutet „Parsen“, dass Wörter aus einem Text oder Anfrage-String anhand von Regeln extrahiert werden, die definieren, aus welcher Zeichenfolge ein Wort besteht und wo die Wortgrenzen liegen.
Beim Parsen für Indizierungszwecke übergibt der Parser jedes Wort an den Server, und dieser fügt das Wort einem Volltextindex hinzu. Beim Parsen eines Anfrage-Strings übergibt der Parser ebenfalls jedes Wort an den Server, und dieser sammelt die Wörter, um sie für eine Suchoperation zusammenzustellen.
Die Parsing-Eigenschaften des eingebauten Volltext-Parsers
werden in Abschnitt 12.7, „MySQL-Volltextsuche“, beschrieben. Hierzu
gehören auch die Regeln, nach denen Wörter aus einem Text
herausgezogen werden. Der Parser wird von bestimmten
Systemvariablen wie ft_min_word_len
und
ft_max_word_len
beeinflusst, die kürzere
oder längere Wörter ausschließen können, und durch die Liste
der Stoppwörter (diese sind häufig vorkommende Wörter, die
übergangen werden).
Durch die Plug-In-API sind Sie in der Lage, einen eigenen Volltext-Parser zu verwenden und somit die Grundaufgaben eines Parsers unter Kontrolle zu haben. Ein Parser-Plug-In kann zwei Rollen spielen:
Es kann den eingebauten Parser ersetzen. In dieser Rolle liest das Plug-In die zu parsende Eingabe, zerlegt sie in Wörter und übergibt diese Wörter an den Server (entweder zum Indizieren oder zum Sammeln von Wörtern).
Sie könnten einen Parser auf diese Weise einsetzen, wenn Sie die Eingabe nach anderen Regeln als der eingebaute Parser in Wörter zerlegen möchten. Für den eingebauten Parser besteht beispielsweise der Text „case-sensitive“ aus zwei Wörtern, nämlich „case“ und „sensitive“, während eine Anwendung diesen Text möglicherweise als ein einziges Wort ansehen sollte.
Das Plug-In kann auch mit dem eingebauten Parser
zusammenarbeiten, indem es als Frontend für diesen dient.
In dieser Rolle extrahiert das Plug-In Text aus der Eingabe
und übergibt ihn an den Parser, der seinerseits den Text
nach seinen normalen Parsing-Regeln in Wörter zerlegt.
Diese Art von Parsing wird besonders von den Systemvariablen
ft_
und der
Stoppwörterliste beeinflusst.
xxx
Auf diese Weise könnten Sie einen Parser einsetzen, wenn
Sie beispielsweise PDF- oder XML-Dokumente oder
.doc
-Dateien indizieren müssen. Der
eingebaute Parser ist nicht für diese Arten von Dokumenten
gedacht, aber ein Plug-In-Parser kann Text aus diesen
Quellen extrahieren und an den eingebauten Parser
übergeben.
Ein Parser-Plug-In kann auch in beiden Rollen aktiv sein. Es kann Text aus einer Eingabe holen, die kein einfaches Textdokument ist (die Frontend-Rolle), und diesen Text auch in Wörter zerlegen (also den eingebauten Parser ersetzen).
Ein Volltext-Plug-In ist mit Volltextindizes indexweise
verbunden: Wenn Sie ein Parser-Plug-In installieren, wird es
deswegen noch nicht für Volltextoperationen benutzt, sondern
steht zunächst einmal nur zur Verfügung. Ein Volltext-Parser
kann dann beispielsweise in einer WITH
PARSER
-Klausel bei der Erstellung einzelner
FULLTEXT
-Indizes angegeben werden. Um einen
solchen Index gleichzeitig mit der Tabelle zu erstellen, tun Sie
Folgendes:
CREATE TABLE t ( doc CHAR(255), FULLTEXT INDEX (doc) WITH PARSER my_parser );
Oder Sie fügen den Index nach der Erstellung der Tabelle hinzu:
ALTER TABLE t ADD FULLTEXT INDEX (doc) WITH PARSER my_parser;
Um den Parser mit dem Index zu verbinden, müssen Sie lediglich
die WITH PARSER
-Klausel in die SQL-Anfrage
einfügen. Suchoperationen werden wie immer formuliert, ohne die
Anfragen in irgendeiner Weise zu ändern.
Wenn Sie ein Parser-Plug-In mit einem
FULLTEXT
-Index verbinden, ist dieses Plug-In
erforderlich, um den Index nutzen zu können. Wird es gelöscht,
wird jeder mit ihm verbundene Index unbenutzbar. Jeder Versuch,
ihn in einer Tabelle zu verwenden, für die kein Plug-In zur
Verfügung steht, löst einen Fehler aus. Nur DROP
TABLE
ist nach wie vor möglich.
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.