Die Volltextsuchfunktion von MySQL bietet einige wenige vom Benutzer einstellbare Parameter. Sie können mehr Kontrolle über das Verhalten der Volltextsuche erhalten, wenn Sie eine MySQL-Quelldistribution verwenden, denn einige Änderungen erfordern Anpassungen am Quellcode. Siehe auch Abschnitt 2.8, „Installation der Quelldistribution“.
Beachten Sie, dass die Volltextsuche standardmäßig bereits für maximale Effektivität optimiert ist. Eine Modifikation des Standardverhaltens kann in den meisten Fällen zu einer Verringerung der Effizienz führen. Ändern Sie den MySQL-Quellcode nur dann, wenn Sie genau wissen, was Sie tun!
Die meisten Volltextvariablen, die in diesem Abschnitt beschrieben werden, müssen beim Serverstart eingestellt werden. Um sie zu ändern, ist ein Serverneustart erforderlich – eine Modifikation bei laufendem Server ist nicht möglich.
Einige Variablenänderungen erfordern eine Neuerstellung der
FULLTEXT
-Indizes in Ihren Tabellen. Hinweise
hierzu finden Sie am Ende dieses Abschnitts.
Die minimalen und maximalen Längen von zu indizierenden
Wörtern werden mit den Systemvariablen
ft_min_word_len
und
ft_max_word_len
definiert. (Siehe auch
Abschnitt 5.2.2, „Server-Systemvariablen“.) Die
standardmäßige Mindestlänge beträgt vier Zeichen, die
vorgabeseitige Höchstlänge hängt von der Version ab. Wenn
Sie einen der Werte ändern, müssen Sie ihre
FULLTEXT
-Indizes neu erstellen. Wünschen
Sie beispielsweise, dass Wörter mit drei Zeichen durchsucht
werden können sollen, dann können Sie die Variable
ft_min_word_len
umstellen, indem Sie die
folgenden Zeilen in eine Optionsdatei schreiben:
[mysqld] ft_min_word_len=3
Danach müssen Sie den Server neu starten und die
FULLTEXT
-Indizes neu erstellen. Beachten
Sie insbesondere die Anmerkungen zu
myisamchk in der Anleitung, die auf diese
Liste folgt.
Um die standardmäßige Stoppwortliste außer Kraft zu
setzen, müssen Sie die Systemvariable
ft_stopword_file
einstellen. (Siehe auch
Abschnitt 5.2.2, „Server-Systemvariablen“.) Der
Variablenwert sollte der Pfadname zu der Datei, die die
Stoppwortliste enthält, oder der Leer-String sein (in
diesem Fall wird die Stoppwortfilterung deaktiviert).
Nachdem Sie den Wert dieser Variablen oder den Inhalt der
Stoppwortdatei geändert haben, starten Sie den Server neu
und erstellen Ihre FULLTEXT
-Indizes dann
neu.
Die Stoppwortliste hat eine freie Form, d. h., Sie können
beliebige nichtalphanumerische Zeichen wie den
Zeilenwechsel, das Leerzeichen oder das Komma verwenden, um
Stoppwörter zu trennen. Ausnahmen sind der Unterstrich
(_
) und ein einzelnes Apostroph
('
), die als Teil eines Wortes behandelt
werden. Der Zeichensatz der Stoppwortliste ist der
Standardzeichensatz des Servers (siehe auch
Abschnitt 10.3.1, „Serverzeichensatz und -sortierfolge“).
Die 50-Prozent-Marke für natursprachliche Suchvorgänge
wird vom jeweiligen Gewichtungsschema bestimmt. Um sie zu
deaktivieren, suchen Sie in
myisam/ftdefs.h
nach der folgenden
Zeile:
#define GWS_IN_USE GWS_PROB
Ändern Sie sie wie folgt ab:
#define GWS_IN_USE GWS_FREQ
Dann kompilieren Sie MySQL neu. In diesem Fall ist es nicht
notwendig, die Indizes neu zu erstellen.
Hinweis: Durch diese
Änderung beeinträchtigen Sie die Fähigkeit von MySQL zur
Bereitstellung passender Relevanzwerte für die Funktion
MATCH()
erheblich.
Wenn Sie tatsächlich nach solchen gängigen Wörtern suchen
müssen, sollten Sie stattdessen im Modus IN
BOOLEAN MODE
suchen, denn bei diesem wird die
50-Prozent-Marke ignoriert.
Um die für die boolesche Volltextsuche verwendeten
Operatoren zu ändern, stellen Sie die Systemvariable
ft_boolean_syntax
ein. Diese Variable
kann zur Laufzeit des Servers geändert werden, allerdings
benötigen Sie hierfür die Berechtigung
SUPER
. Eine Neuerstellung der Indizes ist
in diesem Fall nicht notwendig. Weitere Informationen finden
Sie in Abschnitt 5.2.2, „Server-Systemvariablen“, wo auch
die Regeln für die Einstellung dieser Variablen beschrieben
werden.
Wenn Sie Volltextvariablen ändern, die die Indizierung
beeinflussen (ft_min_word_len
,
ft_max_word_len
oder
ft_stopword_file
), oder die Stoppwortdatei
selbst ändern, müssen Sie Ihre
FULLTEXT
-Indizes nach Durchführung der
Änderungen und dem Neustart des Servers neu erstellen. Um die
Indizes in diesem Fall neu zu erstellen, reicht es aus, eine
QUICK
-Reparaturoperation durchzuführen:
mysql> REPAIR TABLE tbl_name
QUICK;
Beachten Sie, dass, wenn Sie mit myisamchk
eine Operation durchführen, die die Tabellenindizes verändert
(dies können etwa Reparatur- oder Analyseoperationen sein), die
FULLTEXT
-Indizes unter Verwendung der
standardmäßigen Volltextparameterwerte
für die minimale und maximale Wortlänge und die Stoppwortdatei
verwendet werden, sofern Sie nichts anderes angeben. Dies kann
dazu führen, dass Abfragen fehlschlagen.
Das Problem tritt auf, weil diese Parameter nur dem Server
bekannt sind. Sie werden nicht in den
MyISAM
-Indexdateien gespeichert. Um das
Problem zu umgehen, wenn Sie die Werte für die minimale oder
maximale Wortlänge oder die Stoppwortdatei am Server geändert
haben, geben Sie dieselben Werte
ft_min_word_len
,
ft_max_word_len
und
ft_stopword_file
für
myisamchk an, die Sie für
mysqld verwendet haben. Haben Sie also
beispielsweise die Mindestwortlänge auf 3 gesetzt, dann können
Sie eine Tabelle mit myisamchk wie folgt
reparieren:
shell> myisamchk --recover --ft_min_word_len=3 tbl_name
.MYI
Wenn Sie gewährleisten wollen, dass
myisamchk und der Server dieselben Werte für
Volltextparameter verwenden, können Sie sie jeweils in die
Abschnitte [mysqld]
und
[myisamchk]
einer Optionsdatei eintragen:
[mysqld] ft_min_word_len=3 [myisamchk] ft_min_word_len=3
Eine Alternative zur Verwendung von myisamchk
besteht in der Nutzung von REPAIR TABLE
-,
ANALYZE TABLE
-, OPTIMIZE
TABLE
- oder ALTER
TABLE
-Anweisungen. Diese Anweisungen werden vom Server
ausgeführt, der die korrekten Werte der Volltextparameter
kennt.
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.