MySQL: Full Text Search - Userlinux.net

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…

MySQL: Full Text Search

r0sk 30.Apr.2008 1 Comentarios 1715 Lecturas
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%';
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.
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); 
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.
Categorías: programación

Comentarios


gravatar
lonnrot
06.May.2008
Las búsquedas con índices full text search son muy rápidas y efectivas pero no siempre devuelven los resultados correctos si se trata sólo de buscar una palabra. Para búsquedas de una sola palabar es mejor usar like.
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

Escribe un comentario

Nick
Email
URL

Buscar

Cargando...

Categorías

Últimos comentarios

  • BartlettLilly20
  • r0sk
  • coder
  • argordmel
  • uveic
  • MarcosBL
  • quemada
  • alexander
  • Hakky111
  • tramel
  • hoyadas
  • hoyadas
  • hoyadas
  • Anubys
  • Arturo

Tagcloud

lugo freebsd seguridad futbol iphone mysql champions userlinux alemania_2006 copa bsd cakephp rfilms deportes meme blogs conciertos bake debian macosx apple humor programación música games 2008 beers tip lucux cake sysadmin ssh ibook films cumpleaños bash league barça soccer mundial frases opinion felicidades hack php juegos cms personal 2007 ubuntu ds mac sidenotes openbsd linux blogsfera rsidenotes blog nintendo san_froilan

Archivo

Social

Twitter

Enlaces

Enlaces de interés