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.
You are viewing a mobilized version of this site...
View original page here