Creo que desea utilizar Búsqueda booleana de texto completo
Si coincide sin operadores + - contra tales como green red blue se devuelven todas las filas, donde un registro contiene al menos una palabra:green o red o blue .
IN BOOLEAN MODE y sin operadores, cada palabra coincidente obtendrá una puntuación de 1 . Entonces, si hay un registro que coincide con dos de las tres palabras, obtendría una puntuación de 2 .
Para obtener las filas con al menos 2 puntos:
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
En modo de lenguaje natural la puntuación funciona completamente diferente. Creo que se basa principalmente en BM25 .
En grandes conjuntos de datos, búsqueda booleana de texto completo (usando un índice de texto completo
) generalmente supera a REGEXP o LIKE de lejos si las palabras coinciden en alguna parte en el texto. Solo usaría like/regexp para hacer coincidir desde la inicial, como REGEXP '^word' o LIKE 'word%' - si se puede utilizar un índice.