Volltextsuche in mySQL

Eine Volltextsuche soll in einem Projekt realisiert werden. Natürlich könnte man nun an eine LIKE-Bedingung denken. Es soll aber auch über mehrere Felder hinweg gesucht werden und dies performant. Es wird also Zeit, vernünftigerweise das zu nutzen, was mySQL genau für diesen Zweck anbietet: Eine für maximale Effektivität optimierte Suchweise.

Für mySQL-Datenbanken mit einer Version kleiner 5.6.4 muss grundsätzlich zunächst eine MyIsam-Tabelle vorliegen, um die FULLTEXT-Möglichkeiten zu nutzen (vielen Dank an Christian für den Hinweis!). Standardmäßig werden jedoch meist Tabellen vom Typ InnoDB erzeugt. Dies lässt sich aber leicht – und vor allem auch noch nachträglich – anpassen, mit einer einfachen ALTER TABLE-Funktion:

ALTER TABLE tabelle ENGINE=myisam;

Schon liegt die Tabelle im gewünschten Format vor. Ein Volltextindex vom Typ FULLTEXT lässt sich nun für alle Spalten des Typs CHAR, VARCHAR und TEXT erzeugen. Dies kann bei neuen Tabellen gleich bei der CREATE TABLE-Anweisung erfolgen:

CREATE TABLE tabelle (
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    tsErstellt int(11) NOT NULL,
    titel VARCHAR(200),
    text TEXT,
    FULLTEXT (titel, text)
) ENGINE=myisam;

oder nachträglich mittels ALTER TABLE:

ALTER TABLE tabelle ADD FULLTEXT (titel, text);

Das waren auch schon die Vorbereitungen auf Datenbankseite. Kommen wir nun zur Abfrage, z. B. mittels php. Hier wird in der WHERE-Bedingung die Abfrage MATCH benutzt. Nach Aufruf von MATCH folgen kommasepariert in Klammern die Spalten, die durchsucht werden sollen und die indiziert werden. Danach folgt der Begriff, gegen den geprüft werden soll. Also lautet ein entsprechendes Statement beispielsweise:

$sql = "SELECT * FROM tabelle
        WHERE MATCH(titel, text) AGAINST ('".$_REQUEST["suche"]."');";

 

Schwerpunkt:

2 Antworten auf “Volltextsuche in mySQL”

Comments are closed.