Die MySQL Volltextsuche ist eine relativ einfache Möglichkeit um eine Datenbanktabelle nach Text zu durchsuchen. Im Gegensatz zur Suche mit LIKE
, bietet die MySQL Volltextsuche die Vorteile, dass ein Index erstellt wird und die Suche schneller abläuft. Außerdem werden die Ergebnisse nach Relevanz sortiert zurückgeliefert und einiges an „Filterarbeit“ durch das DBMS erledigt. Diese „Filterarbeit“ umfasst neben der Aufteilung des Suchstings in Tokens (also Wörter) z.B. auch dass Worte die kürzer als 4 Zeichen (bei InnoDB 3) oder länger als 84 Zeichen sind bei der Suche nicht berücksichtigt werden. Des Weiteren wird eine sogenannte Stoppwort-Liste angewendet. Stoppwörter sind Wörter, die so oft in der jeweiligen Sprache auftreten, dass sie irrelevant sind und keinen Einfluss auf das Suchergebnis haben. Also z.B. „ist“, „der“, „die“, „wer“ oder „nachdem“.
Diese Stoppwörter sind bei einer Standard-MySQL-Installation für die englische Sprache hinterlegt. Wenn man diese Liste nicht ändert, wird man also keine besonders guten Resultate für deutsche Texte erhalten.
Bevor wir uns ansehen, wie man die Liste ändern kann, ist natürlich die Frage: Wo bekomme ich eine möglichst vollständige Liste aller deutscher Stoppwörter her?
Folgende Listen findet man im Internet:
Die Standardstoppwortliste bei MyISAM ist in MySQL hatcodiert hinterlegt, allerdings kann man eine eigene Liste angeben:
Im MySQL Installationsverzeichnis (bin) die Datei my.cnf oder my.ini suchen. In dieser Datei
ft_stopword_file = "pfad_zur_stoppwortlistendatei.txt"
anlegen. Die Datei dessen Pfad hier angelegt wird, muss die Stoppwörter enthalten. Die Wörter können durch Komma oder Leereichen getrennt sein.
Der Nachteil bei MyISAM, ist, dass man nur eine Stoppwortliste verwenden kann.
Hier gibt es eine Tabelle innodb_ft_default_stopword
in der Datenbank information_schema, die alle Standardstoppwörter enthält. Im einfachsten fall ersetzt man hier einfach die Inhalte mit den deutschen Stoppwörtern. Sie können aber auch eine eigene Tabelle mit den Stoppwörtern anlegen und der Variable innodb_ft_server_stopword_table
bzw.
innodb_ft_user_stopword_table
für einen DB-User zuweisen.
Damnit die Änderungen wirkung zeigen, muss
REPAIR TABLE tabellenname QUICK;
und bei InnoDB
OPTIMIZE TABLE
ausgeführt werden.
Als erster einen Kommentar schreiben.
Schreibe einen Kommentar