MySQL kann eine boolesche Volltextsuche unter Verwendung des
Modifizierers IN BOOLEAN MODE
durchführen:
mysql>SELECT * FROM articles WHERE MATCH (title,body)
->AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
+----+-----------------------+-------------------------------------+ | id | title | body | +----+-----------------------+-------------------------------------+ | 1 | MySQL Tutorial | DBMS stands for DataBase ... | | 2 | How To Use MySQL Well | After you went through a ... | | 3 | Optimizing MySQL | In this tutorial we will show ... | | 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... | | 6 | MySQL Security | When configured properly, MySQL ... | +----+-----------------------+-------------------------------------+
Die Operatoren +
und -
geben an, dass ein Wort vorhanden sein muss bzw. nicht sein
darf, damit eine Übereinstimmung vorliegt. Insofern ruft diese
Abfrage alle Datensätze ab, die das Wort „MySQL“,
aber nicht das Wort „YourSQL“
enthalten.
Die boolesche Volltextsuche hat die folgenden Merkmale:
Sie verwendet die 50-Prozent-Marke nicht.
Datensätze werden nicht automatisch nach absteigender Relevanz sortiert. Dies erkennen Sie am obigen Abfrageergebnis: Der Datensatz mit der höchsten Relevanz ist derjenige, der „MySQL“ zweimal enthält. Er wird aber nicht als Erster, sondern als Letzter aufgeführt.
Sie funktioniert auch ohne
FULLTEXT
-Index, auch wenn eine derart
ausgeführte Suche recht lange dauert.
Die Volltextparameter für minimale und maximale Wortlängen werden angewendet.
Die Stoppwortliste wird angewendet.
Die boolesche Volltextsuche unterstützt die folgenden Operatoren:
+
Ein führendes Pluszeichen gibt an, dass das betreffende Wort in jedem zurückgegebenen Datensatz vorhanden sein muss.
-
Ein führendes Minuszeichen gibt an, dass dieses Wort nicht in einem Datensatz vorhanden sein darf, der zurückgegeben wird.
Hinweis: Der Operator -
schließt nur
solche Datensätze aus, die andernfalls Bestandteil des
Ergebnisses wären. Aufgrund dessen gibt eine boolesche
Suche, die nur mit Minuszeichen gekennzeichnete Begriffe
enthält, ein leeres Ergebnis zurück, nicht jedoch
„alle Datensätze mit Ausnahme derer, die einen der
ausgeschlossenen Begriffe enthalten“.
(kein Operator)
Standardmäßig (also wenn weder +
noch
-
angegeben sind) ist das Wort optional,
aber Datensätze, die es enthalten, werden weiter oben
einsortiert. Dies ahmt das Verhalten von MATCH()
... AGAINST()
ohne den Modifizierer IN
BOOLEAN MODE
nach.
> <
Diese beiden Operatoren werden verwendet, um den Anteil
eines Worts am Relevanzwert zu ändern, der einem Datensatz
zugewiesen wird. Der Operator >
erhöht den Anteil, der Operator <
verringert ihn. Ein Beispiel finden Sie nach dieser Liste.
( )
Mit Klammern werden Wörter zu Unterausdrücken zusammengefasst. Gruppen in Klammern können verschachtelt werden.
~
Eine führende Tilde fungiert als Negationsoperator, d. h.,
der Anteil des Wortes an der Relevanz des Datensatzes wird
negativ gewertet. Dies ist nützlich, um
„Störungswörter“ zu kennzeichnen. Ein
Datensatz, der ein solches Wort enthält, erhält eine
geringere Relevanz als andere, wird aber – anders als bei
-
– nicht vollständig aus dem Ergebnis
ausgeschlossen.
*
Das Sternchen dient als Kürzungs- oder Jokeroperator.
Anders als andere Operatoren wird es an das betreffende Wort
angehängt. Eine Übereinstimmung liegt
bei Wörtern vor, die mit dem vor dem Operator
*
stehenden Wort beginnen.
"
Eine Phrase, die in doppelte Anführungszeichen
(‘"
’) gesetzt ist, entspricht
nur solchen Datensätzen, in denen diese Phrase
wortwörtlich (d. h. wie eingegeben)
vorkommt. Die Volltextsuche unterteilt die Phrase in Wörter
und führt dann eine Suche nach ihnen im
FULLTEXT
-Index durch. Bei Zeichen, die
nicht zum Wort gehören, muss keine exakte Übereinstimmung
vorliegen: Die Phrasensuche erfordert lediglich, dass bei
passenden Datensätzen dieselben Wörter in genau der in der
Phrase angegebenen Reihenfolge vorhanden sind. So entspricht
beispielsweise "test phrase"
"test, phrase"
.
Wenn die Phrase keine Wörter enthält, die im Index vorhanden sind, ist das Ergebnis leer. Wenn beispielsweise alle Wörter Stoppwörter oder kürzer sind als die Mindestlänge für indizierte Wörter, dann ist das Ergebnis leer.
Die folgenden Beispiele veranschaulichen einige Such-Strings, die boolesche Volltextoperatoren verwenden:
'apple banana'
Findet Datensätze, die mindestens eines der beiden Wörter enthalten.
'+apple +juice'
Findet Datensätze, die beide Wörter enthalten.
'+apple macintosh'
Findet Datensätze, die das Wort „apple“ enthalten, stuft aber solche Datensätze höher ein, die auch „macintosh“ enthalten.
'+apple -macintosh'
Findet Datensätze, die das Wort „apple“, aber nicht das Wort „macintosh“ enthalten.
'+apple ~macintosh'
Findet Datensätze, die das Wort „apple“
enthalten. Datensätze, die außerdem das Wort
„macintosh“ enthalten, werden niedriger
eingestuft als solche, die es nicht enthalten. Dies ist
„sanfter“ als eine Suche nach '+apple
-macintosh'
, bei der ein Datensatz bei
Vorhandensein von „macintosh“ überhaupt nicht
zurückgegeben wird.
'+apple +(>turnover <strudel)'
Findet Datensätze, die die Wörter „apple“ und „turnover“ oder „apple“ und „strudel“ (in beliebiger Reihenfolge) enthalten, aber stuft „apple turnover“ höher ein als „apple strudel“.
'apple*'
Findet Datensätze, die Wörter wie „apple“, „apples“, „applesauce“ oder „applet“ enthalten.
'"some words"'
Findet Datensätze, die die exakte Phrase „some
words“ enthalten. Dies wäre etwa „some words
of wisdom“, nicht aber „some noise
words“. Beachten Sie, dass die
‘"
’-Anführungszeichen, die
die Phrase umschließen, Operatorzeichen sind, die der
Trennung der Phrase dienen. Es handelt sich hierbei nicht um
Anführungszeichen, die den Such-String selbst umfassen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.