Wie in meinem letzten Blogeintrag erwähnt bietet MySQL ab der Version 5.6 eine Volltextsuche auch für die Speicherengine InnoDB. Damit lassen sich ab Version 5.6 die Vorteile von InnoDB wie z.B. Transaktionen mit jenen von MyISAM, sprich der Volltextsuche verbinden.
Ich habe diese neue Funktion einmal in der¬†Version 5.6.6 m9 – d.h. eine Version vor dem offiziellen Release Candidate getestet und muss sagen sie funktioniert einwandfrei.
Hier die nötigen Schritte um die Volltextsuche zu nutzen:
- Anlegen einer Tabelle im InnoDB – Format:
[SQL]CREATE TABLE texte(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
titel VARCHAR( 120 ) CHARACTER SET utf8,
inhalt TEXT CHARACTER SET utf8,
FULLTEXT (titel, inhalt)
) ENGINE = INNODB;[/SQL]Mit der Zeile FULLTEXT (titel, inhalt) wird ein Volltextindex erzeugt, der uns die rasche Suche erst ermöglicht.
Die Tabellenbeschreibung sieht nun so aus:
- Das Einfügen der Daten funktioniert wie gewohnt. Ich habe 3 Zeilen mit erfundenem Inhalt eingefügt:
[SQL]INSERT¬†INTO texte (id ,¬†titel,¬†inhalt)¬†VALUES¬†(1¬†,¬†’Neue MySQL Version‘,¬†’Heute ist eine neue MySQL Version erschienen …);
INSERT¬†INTO texte (id ,¬†titel,¬†inhalt)¬†VALUES¬†(2¬†,¬†’MySQL Schritt f√ºr Schritt‘,¬†’Hier lernen Sie Step by Step neues √ºber MySQL …);
INSERT¬†INTO texte (id ,¬†titel,¬†inhalt)¬†VALUES¬†(3 ,¬†’Ganz was anderes‘,¬†’Ab und zu muss auch einmal ein Text ohne Inhalt her …);[/SQL] - F√ºr die Abfrage verwende ich jetzt die Funktionen MATCH() in Kombination mit AGAINST().
MATCH() sucht nach einem String in einer Textsammlung durch. Eine Sammlung ist eine Menge von einer oder mehreren Spalten, die in einem FULLTEXT-Index vorkommen. Der gesuchte Ausdruck wird als Argument an AGAINST() übergeben. Eine nähere Beschreibung der Funktionen MATCH() und AGAINST() werden an dieser Stelle sicher noch folgen. Für die Demonstration der Funktion der Volltextsuche in InnoDB Tabellen ist das aber nicht notwendig.
[SQL]
SELECT * FROM texte
WHERE MATCH (titel, inhalt) AGAINST (‚MySQL‘);
[/SQL]
… liefert mir nun genau jene 2 Datens√§tze in deren Texten das Wort ‚MySQL‘ vorkommt.
Nat√ºrlich bekomme ich wenn ich z.B: nur das Wort ‚Text‘ suche nur die 3. Zeile ausgegeben …
Soweit einmal ein erster Einblick in eine neue Funktion der MySQL Version 5.6