Ich denke, Sie möchten die boolesche Volltextsuche
Wenn Sie ohne Operatoren übereinstimmen +
-
gegen wie green red blue
alle Zeilen werden zurückgegeben, in denen ein Datensatz mindestens ein Wort enthält:green
oder red
oder blue
.
IN BOOLEAN MODE
und ohne Operatoren erhält jedes übereinstimmende Wort 1
. Wenn es also einen Datensatz gibt, der mit zwei der drei Wörter übereinstimmt, würde er 2
erzielen .
So erhalten Sie die Zeilen mit mindestens 2 Punkten:
SELECT *,
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE) `score`
FROM `my_tab` WHERE
MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE)
HAVING `score` >= 2
ORDER BY `score` DESC
Im Natural-Language-Modus Die Wertung funktioniert ganz anders. Denke, es basiert hauptsächlich auf BM25 .
Bei großen Datensätzen boolesche Volltextsuche (unter Verwendung eines Volltextindex
) übertrifft normalerweise REGEXP
oder LIKE
bei weitem, wenn Wörter irgendwo übereinstimmen im Text. Würde nur like/regexp für den Abgleich vom Anfangsbuchstaben verwenden, z. B. REGEXP '^word'
oder LIKE 'word%'
- ob ein Index verwendet werden kann.