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.