MySQL Volltextsuche (engl. Full-Text Search) in 3 Schritten

Die Volltextsuche ist ein gutes Werkezeug, um dem Benutzer mehr Komfort bei der Suche auf der eigenen Webseite, durch relevantere Ergebnisse, zu ermöglichen und diese dem Webseiten-Besucher in geeigneter Form zu präsentieren.

Mit Hilfe der Volltextindizierung, bietet MySQL die Funktionalität der Volltextsuche in MyISAM Tabellentypen an. Mit dem Indextyp FULLTEXT versehene CHAR-, VARCHAR- und TEXT-Spalten ermöglichen die benutzerfreundliche Suche. Näheres unter http://dev.mysql.com/doc/refman
/5.1/de/fulltext-search.html
einsehbar.

1. Schritt – Volltext Index erstellen

Es existieren zwei Wege einen Volltextindex zu erstellen, bei der Neuerstellung einer Tabelle oder dem nachträgliche Hinzufügen. Bei der Erstellung einer Tabelle sehe dies auf dem MySQL-Prompt wie folgt aus:

mysql> CREATE TABLE testtabelle (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> testspalte1 VARCHAR(200),
-> testspalte2 TEXT,
-> FULLTEXT (testspalte1,testspalte2)
-> );

Das nachträgliche Hinzufügen des Fulltextindex ist mit der ALTER-Anweisung möglich:

mysql> ALTER TABLE testtabelle ADD FULLTEXT (testspalte1,testspalte2);

2. Schritt – Eigene Stopwortliste

Eine Stopwortliste ermöglicht bei der Volltextsuche Füllwörter (und, als, der etc.) bei der Relevanzberechnung zu ignorieren. Je nach Kontext der Seite möchte man eine eigene Stopwortliste verwenden um dem Webseiten-Besucher relevantere Ergebnisse zu liefern.
In der my.cnf meldet man die eigene Stopwortliste wie folgt an:

[mysqld]
ft_stopword_file=”PFAD/stopword_de.c
ft_min_word_len=”3″

Mit ft_min_word_len=”3″ gibt man die Mindestlänge eines Suchbegriffes an, alle Suchbegriffe die kürzer sind werden ignoriert. Wird dieser Wert nicht gesetzt, gilt der default-Wert von vier Zeichen Mindestlänge. Die Stopwortliste ist eine Anreihung von Begrifflichkeiten mit Komma getrennt:

“dann”,
“das”,
“dass”

Lesezugriff (644) auf die Stopwortliste ist vollkommen ausreichend.

DOWNLOAD: Beispiel Stopwortliste für deutschen Sprachraum

stopword_de.c

3. Schritt – Die Such-Query

Um die Volltextsuche auch benutzen zu können, bedarf es eines abgeänderten SELECTs:

mysql> SELECT id, MATCH (testspalte1,testspalte2) AGAINST (‘Suchwort‘) AS rang
FROM testtabelle
WHERE MATCH (testspalte1,testspalte2) AGAINST (‘Suchwort‘);

Die unterstrichenen Bereiche der SELECT-Abfrage ermöglichen die Volltextsuche. Der Alias rang wird nach der Abfrage den Wert (0-1, wobei 0 unrelevant wäre und 1 die maximale Relevanz darstellt) für die Relevanzbestimmung annehmen.
Nun kann man (hier mit PHP) dem Benutzer den Relevanzwert etwas schmackhafter servieren, indem man rang als prozentualen Wert umrechnet.

<? number_format(($ergebnis['rang'] * 100),0).”%”; ?>

Voila!

Hinweise

Die Volltextsuche lohnt sich erst bei einer hohen Datendichte. Bei ein, zwei Webseiten in der Datenbank wird die Volltextsuche kaum relevante Ergebnisse liefern, denn MySQL prüft ob der Suchbegriff in mindestens 50 Prozent der Datensätze vorhanden ist und erklärt diesen dann als unrelevant für die Abfrage. Macht ja auch Sinn, wenn man bedenkt, dass das Wort Auto auf einer Automobilhersteller-Webpräsenz ziemlich unnütz für eine Suchanfrage erscheint.

Diese Anleitung ist ein praktischer Leitfaden ohne Gewähr.

Weiterführende Literatur

empfehlenswert sind folgende Bücher:

Druckansicht


Autor: admin
Datum: Mittwoch, 30. Januar 2008 16:08
Trackback: Trackback-URL Themengebiet: MySQL

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

Ein Kommentar

  1. 1

    Wow – ich musste echt lange googlen, stieß dann aber auf Ihren Artikel. Sehr fundiert und prägnant, Hut ab.
    Ich habe ihn mir direkt gebookmarkt und werde mich nun weiter umschauen.
    Super!

Kommentar abgeben