FULLTEXT- index in MySQL
Autor: Vilma Plum
eingetragen: Freitag, 03. Juni 2005 um 00:00 Uhr (22/2005 Kalenderwoche)
geändert: Mittwoch, 24. August 2005 um 08:55 Uhr (34/2005 Kalenderwoche)
Keywords: fulltext suche ranking
Kategorien: DB: MySQL, DB: MariaDB,
Text:
Nur auf VARCHAR- und TEXT-Spalten anwendbar. Bei großen Datenmengen ist es schneller und besser, wenn der Fulltext-Index erst nach Füllen der tables gesetzt wird, und nicht schon bei Anlegen der DB.
ALTER TABLE tablename ADD FULLTEXT(Spaltenliste).
FULLTEXT-SEARCH:
Diese wird mit MATCH ausgeführt:
MATCH (Spalte-a, Spalte-b) AGAINST (‚Suchbegriff’) as Ranking
Letzteres liefert dann einen Ranking-Wert zurück, non-negative floating-point number. Wird MATCH/AGAINST in der WHERE-clause genutzt, kommen die Ergebnisse decreased sortiert zurück. Suchbegriffe müssen mindestens 3 Zeichen lang sein, kürzere werden von MySQL nicht als Wort interpretiert. Die Berechnung der Relevanz erfolgt nach verschiedenen Kriterien:
Anzahl der Wörter in der Zeile.
Anzahl der unique Wörter in dieser Zeile.
Gesamtanzahl der Wörter in der Sammlung.
Anzahl der Dokumente (Zeilen) die dieses Wort enthalten.
etc.
Damit schneidet ein Suchbegriff, der in vielen Dokumenten und Zeilen vorkommt schlechter ab. Er kann sogar den Wert 0 erhalten, gerade weil er so oft vorkommt und damit einen 'kleineren semantischen Wert' aufweist. Der Schwellenwert ist hier 50%, kommt ein Wort in mehr als 50% der Datasets vor, kommt als Ergebnis keine Datansätze zurück. Dieses Feature wurde so gewählt, damit es bei großen Datenmengen effizient arbeitet, hat allerdings dann Nachteile bei kleineren Datenmengen.
ACHTUNG: Diese zuletzt genannte Spaltenliste muss genauso in der MATCH-Anweisung genannt werden.
Der FULLTEXT-Index kann immer nur über eine Tabelle gelegt werden. Daher ist es evt. sinnvoll, Atribute, die in cross-tables verknüpft sind, für den Fulltext-index auch in der Haupt-Tabelle mitzuführen.
Die Erstellung eines FULLTEX-Index ist sehr langsam, nicht nur bei Ersterstellung sondern auch bei allen Erweiterungen.
SUCHOPTIONEN:
Werden zwei Wörter eingegeben, kann das Ergebnis auch nur eines dieser Wörter enthalten (boolsches ODER). Groß-Klein-Schreibung wrid nicht berücksichtigt.
Die Suche basiert auf ganzen Wörtern. Plural, Fallendungen usw. liefern keine Ergebnisse. Um dies zu umgehen, sollten Varianten im Suchbegriff eingegeben werden.('book books').
Erlaubte Zeichen sind Bcuhstaben, Zahlen,’ und _, ebenso ÄÖÜ
Verbesserungen mit Version 4.0:
Bessere Verwaltung, damit Performance-Steigerung.
+word dieses Wort muss im Datensatz enthalten sein, (‚+wort1 +wort2’) entspricht so einem boolschen UND.
-word darf nicht enthalten sein
word größerer Stellenwert
~word weist einem RAUSCH-Wort einen negativen Stellenwert zu
Quellcode:
ALTER TABLE `a_ble_internet`
ADD FULLTEXT `sucheohne` (
`interne_nummer` ,
`titel` ,
`titel_eng` ,
`beschreibung` ,
`beschreibung_eng` ,
`ergebnis` ,
`ergebnis_eng` ,
`wissenschaftler_internet` ,
`schwerpunkt` ,
`stichpunkte`
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SELECT *
FROM a_ble_internet
WHERE MATCH (
`interne_nummer` ,
`titel` ,
`titel_eng` ,
`beschreibung` ,
`beschreibung_eng` ,
`ergebnis` ,
`ergebnis_eng` ,
`wissenschaftler_internet` ,
`schwerpunkt` ,
`stichpunkte`
)
AGAINST ('%getreide%')