sql >> Base de Datos >  >> RDS >> Mysql

php/mysql. ¿Existe una función mysql para detectar si existen al menos 2 palabras determinadas en al menos un campo de fila mysql?

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.