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

Misterio de búsqueda de texto completo de MySQL

De Documentos de MySQL

  • + Un signo más inicial indica que esta palabra debe estar presente en cada fila que se devuelve.

  • * El asterisco sirve como operador de truncamiento (o comodín). A diferencia de los otros operadores, debe agregarse a la palabra que se verá afectada. Las palabras coinciden si comienzan con la palabra que precede al *operador.

    Si se especifica una palabra con el operador de truncamiento, no se elimina de una consulta booleana, incluso si es demasiado corta (según lo determinado por la configuración ft_min_word_len) o una palabra vacía. Esto ocurre porque la palabra no se ve como demasiado corta o como palabra clave, sino como un prefijo que debe estar presente en el documento en forma de palabra que comienza con el prefijo .

En contexto:

PARTIDO(...) CONTRA(...)

MATCH (name) AGAINST ('+ski*' IN BOOLEAN MODE) significa que está buscando filas donde una palabra en el name la columna debe contener ski y debe comenzar con la palabra ski .

Del conjunto que has publicado, Dartmouth Skiway es el único name que cumple con estos requisitos:contiene la palabra ski , y tiene como prefijo la palabra ski .

El otro name columnas, aunque coinciden con la primera regla:debe contener ski , no tienen el prefijo ski , según lo estipulado en su regla. La fila devuelta por su búsqueda booleana es la única con un name columna que contiene una palabra que contiene ski y es una palabra prefijada por ski .

Como sugirió ajreal, intente disminuir el ft_min_len_word_setting en my.cnf . Es posible que su búsqueda no arroje los resultados esperados debido a la configuración predeterminada. Intenta reducirlo a 3.

DÓNDE columna LIKE %text%

WHERE name LIKE "%ski%" busca filas con name columnas que contienen ski , sin importar dónde aparezca la palabra.