MySQL: 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%';Para evitar este tipo de estropicios lo primero que debemos hacer es crear el índice fulltext search. Ojo, que va a ser un índice múltiple en el que no pueden haber campos del tipo BLOB.
ALTER TABLE noticias ADD FULLTEXT(titulo, contenido);Y lo único que hemos de cambiar es la query de búsqueda, que pasará a ser algo tal que así:
SELECT * FROM noticias WHERE MATCH(titulo, contenido) AGAINST ('$palabra');Así de simple, y si además queremos usar operadores booleanos -ni más ni menos que como Google- tan solo hemos de agregar un IN BOOLEAN MODE a la consulta:
SELECT * FROM noticias WHERE MATCH(titulo, contenido) AGAINST ('+limon -pera', IN BOOLEAN MODE);Y podremos usar operadores como +, -, *, mayor y menor... (lista de operadores).
Un tip muy sencillo de implementar que aumentará el rendimiento de las búsquedas en nuestro sitio.
Comentarios
Una manera cómoda de usar una opción u otra es hacer:
$cadena_a_buscar='Lorem ipsum';
$numero_de_palabras=str_word_count($cadena_a_buscar);
if ($numero_de_palabras>1) //usar full text search
else //usar like