Home > Mysql > Como usar FullText en Mysql

Cuando debemos buscar entre una gran cantidad de datos, la búsqueda con el comando Like se hace tediosa y bastante imprecisa, debemos comenzar a utilizar las búsquedas FullText.

El problema se presenta cuando nuestra aplicación ya dispone de un número elevado de registros, digamos más de 500, entonces los resultados devueltos por el buscador pueden ser muy elevados y totalmente irrelevantes.

Para combatir este problema en MySQL se crearon un tipo de índices llamados FullText, estos índices nos permiten hacer búsquedas mucho más afinadas que las prestadas por Like, ya que ellos mismos devuelven un valor en forma de porcentaje indicándonos el grado de semejanza que tiene el término buscado con los registros encontrados en la base de datos.

Un ejemplo práctico:

Imaginemos que tenemos la siguiente estructura:

CREATE TABLE `autos` (
idprod INT(11) NOT NULL AUTO_INCREMENT,
nombre VARCHAR(120),
descripcion VARCHAR(255),
PRIMARY KEY (idprod),
UNIQUE KEY idprod (idprod),
);

Si un usuario hace una búsqueda en nuestra base de datos por ejemplo con la palabra “Audi”, la función le devolvería los siguientes resultados:

SQL="Select idprod, nombre From coches Where nombre Like '%Audi%';"
idprod | nombre 

**********************************************

1 | Audi A3 TDI

2 | Audi A3 TDI

3 | Audi 100 CV

4 | Equipo de Audio 100Wats

5 | Los coches cada vez tienen más audiencia

Como se puede observar, la consulta no es todo lo exacta que deseamos ya que está devolviendo registros que no tienen nada que ver con la consulta original del usuario. Y no nos paremos a pensar si el usuario pone en su búsqueda “Audi barato”, nos llegaría a mostrar coches con la palabra “barato” en su nombre aunque no fuesen de la casa Audi. FullText es la solución Desde la versión 3.23.23 de MySQL existe un tipo de índice llamado FullText, para poder implementarlo primero deberemos de añadirlo a nuestra tabla, hay que tener en cuenta que este tipo de índices tan solo se pueden utilizar en tablas MyIsam, crearemos el índice de la siguiente manera:

ALTER TABLE autos ADD FULLTEXT (nombre, descripcion);

Ahora llega el momento de realizar la consulta que extraerá los registros de la tabla:

SQL="Select nombre, descripcion From autos Where Match(nombre, descripcion) AGAINST ('busqueda');"

Esta consulta nos devolverá exactamente lo que queremos ver, realmente no sé que criterios obedece este tipo de índice para extraer los coincidencias más exactas, pero el caso es que funciona y muy bien. De igual manera, este tipo de búsqueda tiene unas características peculiares: