MySQL Stopwords Liste anpassen

Gleich noch ein Problem hinterher, das auch im Zuge des Umzugs eines Projekts von MySQL 4 auf 5 aufgetreten ist: ich wollte mit einer Volltext-Suche nach einem oder mehreren Worten in einer Liste aus Worten arbeiten. In manchen Fällen enthielt die Suchwort-Liste den Begriff „help“. In diesem besonderen Fall, kamen ganz ungewöhnliche Ergebnisse zustande und bestimmt Einträge wurden nicht selektiert, die aber eigentlich gefunden werden sollten. Auf dem alten MySQL4-Server funktionierte die Suche problemlos. Was war los?

Es gibt für Volltextsuchen eine Stopwords-Liste, die in der MySQL-Installation einkompiliert ist. Diese Liste enthält etliche Worte, die häufig in der Sprache vorkommen. So z.B. „an“, „and“, „any“, „all“ … usw. und eben auch besagtes „help“.

Um nun nicht MySQL neu kompilieren zu müssen, kann man auch eine externe Wortliste per Konfigurationsanweisung ft_stopword_file angeben. Also schnell eine externe Wortliste besorgen (z.B. hier), anpassen (z.B. das „help“ entfernen) und eine Zeile in die /etc/mysql/my.cnf eintragen:

ft_stopword_file = /etc/mysql/common_words

Und den MySQL-Server neustarten. Anschließend sollten auch Volltext-Suchen nach „help“ funktionieren. Also z.B. derartiges:

[SQL]
SELECT * FROM articles WHERE MATCH (tags) AGAINST (‚+help +health‘ IN BOOLEAN MODE);
[/SQL]

(Finde alle Einträge in der Tabelle „articles“ bei denen im Feld tags sowohl „help“ als auch „health“ vorkommt)

Ob das Verwenden einer externen Stopwords-Datei anstatt der einkompilierten Liste sich signifikant nachteilig auf die MySQL-Perfomance auswirkt habe ich noch nicht überprüft oder herausgesucht.

Schreibe einen Kommentar