MySQL Fulltext Search Minimum Word Length

Beim Switch eines Projekts von MySQL4 auf MySQL5 ist es mir vor kurzem passiert, dass die Suche nicht mehr zufriedenstellend funktionierte: Beiträge, die eigentlich selektiert werden sollten, kamen einfach nicht mehr zu vorschein. Dort gab es also soetwas wie:

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);

Eine Fehlersuche von mehr als einer halben Stunde brachte dann zutage, dass es sich um die minimale Länge der bei Fulltext-Anfragen verwendeten Suchworte handeln könnte, wie auch in der Dokumentation zu lesen ist:

The minimum and maximum word length full-text parameters apply.

Ein Blick auf „MySQL-System-Variablen anzeigen“ im phpMyAdmin zeigte auch tatsächlich an, dass dort 4 für den entsprechenden Parameter eingestellt war:

ft min word len 4

Und im Forum findet sich die Lösung:

SET GLOBAL ft_min_word_len=3; should do the trick. You need SUPER privilege.

Note: FULLTEXT indexes must be rebuilt after changing this variable. Use REPAIR TABLE tbl_name QUICK.

Die Änderung möchte ich aber für den gesamten MySQL-Server verfügbar haben, und nicht nur zur Laufzeit. Also schnell als root folgendes in die /etc/mysql/my.cnf hinzugefügt:

ft_min_word_len = 3

und dann noch den MySQL-Server neu starten:

/etc/init.d/mysql restart

Nicht vergessen sollte man natürlich auch das

REPAIR TABLE table_name QUICK;

damit der Index auch neu generiert wird. Und nun funktioniert auch die Suche wieder so wie vorher, auch bei 3-buchstabigen Suchworten…

Schreibe einen Kommentar