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.