MySQL: Full Text Search
Cuando pretendes programar una especie de buscador para integrar en una web y te pones a leer las múltiples y distintas formas de hacerlo te das cuenta de que LIKE no es la solución. Y menos aún habiendo funciones Full Text Search.
El supuesto es sencillo, un par de campos determinantes en la búsqueda para que los resultados sean adecuados. Por ejemplo los campos título y contenido de una tabla noticias. El típico:
SELECT *
FROM noticias
WHERE titulo LIKE '%$palabra%'
OR contenido LIKE '%$palabra%';
La diferencia entre un BLOB y un TEXT es que el primero es case sensitive (distingue entre mayúsculas y minúsculas) y el segundo no. Podemos cambiar el "collation" utf8_bin por un utf8_general_ci para arreglar este inconveniente.
Generamos el índice de los campos que nos interesan, título y contenido en este caso de la siguiente forma:
ALTER TABLE noticias ADD FULLTEXT(titulo, contenido);
SELECT *
FROM noticias
WHERE MATCH(titulo, contenido) AGAINST ('$palabra');
SELECT *
FROM noticias
WHERE MATCH(titulo, contenido) AGAINST ('+limon -pera', IN BOOLEAN MODE);
Un tip muy sencillo de implementar que aumentará el rendimiento de las búsquedas en nuestro sitio.