Mysql
 sql >> Datenbank >  >> RDS >> Mysql

php/mysql. Gibt es eine MySQL-Funktion, um zu erkennen, ob mindestens 2 bestimmte Wörter in mindestens einem MySQL-Zeilenfeld vorhanden sind?

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.