Rolf B: MySQL Volltextindex

Beitrag lesen

Hallo Linuchs,

ich habe mal eine Tabelle mit Volltext-Index angelegt. Spalten ID, Interpret, Titel. Interpret und Titel sind mit Collation UTF8_GENERAL_CI angelegt. Sorry für den Hinweis auf AI Collations, das kennt MySQL scheinbar nicht (zumindest meins nicht), das scheint MS SQL Server zu sein.

Satz 1:
Interpret: Freddy Quinn
Titel: Junge, komm bald wieder

Satz 2:
Interpret: Freddy Mercury
Titel: Who wants to live forever

Satz 3:
Interpret: Freddy Krueger
Titel: I'm a Dreamer

Satz 4:
Interpret: Freddi Quinn
Titel: Junge, komm bald wieder, bald wieder, nach Haus. Junge, fahr nie wieder, nie wieder hinaus

Für diese Tabelle habe ich einen Volltextindex auf die Spalten Interpret und Titel angelegt. Darauf kann man nun mit

SELECT Match(Titel,Interpret) AGAINST (:query), Titel, Interpret 
ORDER BY 1 DESC

abfragen (PDO-Style, statt :query kann man auch ? schreiben für MYSQLI)

Was er nicht macht, ist Freddy für Freddi finden.

Aber man kann z.B. nach Freddy Junge suchen. Oder Freddy Forever. Oder auch nach FREDDY oder freddy. Und vor allem auch nach Frêddy. Fräddy nicht. Man kann auch nicht mit Fräddy nach Fræddy suchen. Ganz so super ist es also auch nicht. Ggf. kannst Du eine Eingabehilfe vorsehen für die häufigsten Zeichen die auf einem T1-Layout nicht stehen - oder einen Affiliate Link für T2-Tastaturen bereitstellen 😂.

Was Du nicht musst, ist Leerzeichen und Sonderzeichen rausschmeißen. Darum kümmert sich MYSQL. Aber du könntest ggf. ein Indexfeld einfügen wo die "ungewöhnlichen" Zeichen "normiert" werden, z.B. æ zu ä, und darauf dann eine Volltextsuche machen.

MATCH...AGAINST liefert einen Trefferscore. Nach dem kann man absteigend sortieren und ggf. noch auf 10 oder 50 Zeilen limitieren.

So, das wollte ich mal untersucht haben.

Rolf

--
sumpsi - posui - obstruxi