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…