MySQL Cookbook by

Discusión

Para encontrar registros que contengan una frase concreta, no se puede utilizar una simple FULLTEXTbúsqueda:

mysql>  -> +----------+| COUNT(*) |+----------+| 548 |+----------+

La consulta devuelve un resultado, pero no es el que se busca. Una FULLTEXTbúsqueda calcula una clasificación de relevancia basada en la presencia de cada palabra individualmente, sin importar dónde se encuentre dentro de la columnavtext, y la clasificación será distinta de cero siempre que alguna de las palabras esté presente. En consecuencia, este tipo de consulta tiende a encontrar demasiados registros.

A partir de MySQL 4.0.2, la búsqueda FULLTEXT soporta la búsqueda de frases en modo booleano. Para utilizarla, basta con colocar la frase entre comillas dobles.

mysql>  -> +----------+| COUNT(*) |+----------+| 1 |+----------+

Antes de la versión 4.0.2, era necesario utilizar una solución. Podría utilizar una búsquedaIN BOOLEANMODE para requerir que cada palabra esté presente, pero eso no resuelve realmente el problema, porque las palabras pueden seguir apareciendo en cualquier orden:

mysql>  ->  -> +----------+| COUNT(*) |+----------+| 3 |+----------+

Si utiliza una coincidencia de patrón SQL en su lugar, devuelve el resultado correcto:

mysql>  -> +----------+| COUNT(*) |+----------+| 1 |+----------+

Sin embargo, utilizar una coincidencia de patrón SQL es probablemente más lento que una búsquedaFULLTEXT. Así que parece que tiene la desagradable opción de utilizar un método que es más rápido pero no produce los resultados deseados, o uno que funciona correctamente pero es más lento. Afortunadamente, no son las únicas opciones. Puede combinar ambos métodos en la misma consulta:

mysql>  ->  -> +----------+| COUNT(*) |+----------+| 1 |+----------+

Lo que se consigue es lo mejor de ambos tipos de búsqueda:

  • Usando la expresión MATCH( ), MySQL puede realizar una búsquedaFULLTEXT para producir un conjunto de filas candidatas que contengan palabras en la frase. Esto reduce la búsqueda considerablemente.

  • Usando la prueba de patrón SQL, MySQL puede buscar en las filas candidatas para producir sólo aquellos registros que tengan todas las palabras dispuestas en el orden apropiado.

Esta técnica fallará si todas las palabras son menores que la longitud mínima de palabra del motor de indexación o aparecen en más de la mitad de los registros. En ese caso, la búsqueda FULLTEXT no devuelve ningún registro. Puede encontrar los registros utilizando una coincidencia de patrónSQL.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.