Cuando buscamos en una base de datos por algún campo de texto, la primera opción que nos surge es utilizar LIKE. Pero nos damos cuenta que esta búsqueda depende para que casos puede darnos un rendimiento bastante decepcionante, ya que busca en todas la filas de la tabla buscando coincidencia con una subcadena de los campos seleccionados. Otro problema es la ordenación por el número de apariciones.
SELECT name FROM tabla WHERE campo1 LIKE "%LO_QUE_SEA%" OR campo2 LIKE "%LO_QUE_SEA%";
En MySQL existe un tipo de índice especial llamado FULLTEXT, que hará referencia a los campos de la tabla indexando todas las palabras incluidas en el mismo.
Para crear un índice se hará de la siguiente forma:
ALTER TABLE tabla ADD FULLTEXT (campo1,campo2, ...);
SELECT * FROM tabla WHERE MATCH (campo1,campo2,...) AGAINST ("lo_que_quieras_buscar");
Los campos sólo pueden ser de tipo texto (char, varchar o text).
Los resultados vendrán ordenados por importancia.
A tener en cuenta:
SELECT * FROM tabla WHERE MATCH(columna) AGAINST("lo_que_sea" IN NATURAL LANGUAGE MODE);
SELECT * FROM table WHERE MATCH(column) AGAINST (“+Demo -Demo2” IN BOOLEAN MODE);
SELECT * FROM table WHERE MATCH(column) AGAINST(‘“search string”’ IN BOOLEAN MODE);
SELECT * FROM tabla WHERE MATCH(columna) AGAINST("cadena" WITH QUERY EXPANSION);
-- ALTER TABLE data ADD FULLTEXT (noticia,sub,extracto);
-- ALTER TABLE meneame ADD FULLTEXT (noticia,sub,extracto);
SELECT
MATCH(noticia,sub,extracto)
AGAINST ("coches") as puntos, meneame.noticia,
meneame.sub,
meneame.extracto
FROM meneame WHERE MATCH(noticia,sub,extracto)
AGAINST ("coches");