Nachdem wir den Volltext aufgebaut haben, schreiten wir zur Tat und stellen vermutlich gleich fest, dass MySQL gar keine Treffer zurückgibt:
mysql> select * from seiten where match Text against('Seite'); Empty set (0.44 sec)
Noch seltsamer wird die Sache, wenn wir die folgende Abfrage absetzen:
mysql> select * from seiten where match Text -> against('Schweiz'); +--------+-------+---------------------------+------+ | AkteID | Seite | Text | Bild | +--------+-------+---------------------------+------+ | 1 | 1 | Ferien, Felsberg, Schweiz | NULL | +--------+-------+---------------------------+------+ 1 row in set (0.01 sec)
Wir haben es hier nicht mit einer 'patriotisch' gesinnten MySQL-Version zu tun, sondern vielmehr mit einer Eigenheit der MySQL-Abfragetechnik, die am Anfang verwirren kann. MySQL zeigt bei der normalen Volltext-Abfrage 'match Feld against('Text') nur Treffer an, sofern diese nicht in mehr als der Hälfte der Datensätze vorkommen. Mit anderen Worten gesagt, was allzu häufig auftritt, wird einfach unterschlagen. Ob das Sinn macht, bleibe dahingestellt, viel lieber möchte ich die Variante zeigen, bei der wir in jedem Falle sämtliche Treffer erhalten:
mysql> select * from seiten where match Text -> against('Seite' in boolean mode); +--------+-------+----------------------------------+------+ | AkteID | Seite | Text | Bild | +--------+-------+----------------------------------+------+ | 1 | 2 | Wir erfassen eine zweite Seite | NULL | | 1 | 3 | Jetzt haben wir die dritte Seite | NULL | +--------+-------+----------------------------------+------+ 2 rows in set (0.01 sec)
Sobald wir den Zusatz 'in boolean mode' verwenden, erhalten wir auch beim Suchen nach 'Seite' in unserem Beispiel korrekt zwei Treffer angezeigt. Persönlich ziehe ich 'in boolean mode' der Standard-Variante meist vor.