Bienvenidos a Patodos.com.ar el portal dedicado exclusivamente a grandes comunidades. En definitiva Gente como vos y para vos.
¡Bienvenido a Patodos.com.ar!
El portal dedicado exclusivamente a esa gente adicta al chateo

Haga de Patodos su página de inicio

Menu
Volver a la Home

  Ciudad de Buenos Aires, Argentina Hay Actualmente 10  Usuarios Conectados al Sitio  
Hosting Argentino
Hosting Argentino

Búsquedas con Full-text y MySQL  

MySQL posee la funcionalidad Full-text, que permite búsquedas más racionales dentro de una base de datos. Este tutorial te enseñará qué necesitas, qué tienes que modificar en tu Base de Datos y cómo ejecutar la consulta para poder crear en tu web un sencillo motor de búsqueda (y mucho más eficaz que usando LIKE).

Una (casi) desconocida de las funcionalidades de MySQL, a partir de su versión 3.23.23 es "Full-text" , que permite realizar búsquedas dentro de un campo a partir de una cadena de caracteres.

Habitualmente, un método de búsqueda sencillo dentro de una tabla pasaba por utilizar LIKE:

SELECT texto FROM articulos WHERE texto LIKE '%$palabra%'

El problema aparecía cuando en vez de una sola palabra eran varias las que había que buscar: Si "$palabra" equivalía, por ejemplo, a "dreamweaver ultradev", una frase dentro de los textos almacenados que fuera "dreamweaver y ultradev" no devolvería resultados (por culpa de la "y").

Para esto sirve Full-text: MySQL se encargará de comparar la cadena que le pasemos con los contenidos de la BD y devolver resultados aproximados. Suena bonito, pero tiene algunas limitaciones (justificadas):

  • No devolverá resultados si la palabra aparece demasiadas veces en los registros: si todos nuestros registros (o más del 50%, para ser más exactos) tienen la palabra "dreamweaver", no devolverá resultados.¿Por qué?. esta función está pensada para tablas con muchos registros y no tendría sentido devolverlos todos: ¿es interesante devolver 5.000 resultados a una búsqueda?.
  • Por la razón anterior, la consulta omitirá palabras demasiado comunes, como preposiciones y artículos (de, con, a, el)...

    ¿Qué necesitamos para utilizar Full-text?

  • Lo primero, que MySQL sea de una versión superior a la 3.23.23.
  • Que el campo de la tabla en que vamos a buscar sea del tipo TEXT

    Con estos 2 requisitos, lo primero que necesitaremos será indicarle a MySQL que queremos modificar el campo para que acepte esta función. En nuestro ejemplo vamos a utilizar una sencilla tabla, llamada "artículos", que tiene estos campos.

  • id_articulo
  • titulo
  • texto

    Podemos utilizar cualquiera de los IDE's disponibles para MySQL (MySQLFront ó PHPMyAdmin son válidos), para pasarle a la BD esta sentencia SQL:

ALTER TABLE articulos ADD FULLTEXT(texto);

Si lo hemos realizado correctamente, MySQL nos devolverá el OK.

Con la tabla preparada, llega la hora de aprender cómo se pasan las consultas, ya que no basta con SELECT: deberemos utilizar además MATCH(campo) AGAINST(cadena). En nuestro ejemplo:

SELECT titulo,texto FROM articulos WHERE MATCH(texto) AGAINST ('$palabras')

Traducido: seleccionar los campos "titulo" y "texto" de "artículos", filtrando donde haya coincidencias en el campo "texto" para la variable "$palabras".

¿No parece difícil, no?, pues aún hay más: MySQL nos puede devolver un número que indica el valor de coincidencia en cada registro (llamado habitualmente "SCORE" en muchos sitios). No es un valor en porcentaje, y puede varíar desde casi 0 (cero) hasta más de 4 según los cálculos realizados por MySQL). Es útil para ordenar los resultados por orden de coincidencia. Utilizarlo es un poco más complicado, pero no mucho: sólo tendremos que utilizar 2 veces MATCH... AGAINST. La consulta sería:

SELECT titulo,texto, MATCH(texto) AGAINST('$palabras') AS coincidencia
FROM articulos
WHERE MATCH(texto) AGAINST ('$palabras')
ORDER BY coincidencia DESC

¿Cómo se aplica todo esto a UD/DWMX?
Bueno, sólo tenemos que aplicarlo al crear un recordset. He aquí una imagen de cómo queda la consulta (suponiendo que el formulario utilice el método "post"):




Y dentro del panel de Data Bindings nos aparecerán los tres campos: "texto", "titulo" y "coincide".

En un próximo tutorial, cuando MySQL 4 sea ya más popular, veremos cómo ésta nueva versión permite además la ejecución de consultas booleanas.



 Copy Right © 1999 - 2007 Patodos Todos los Derechos Reservados. | Administracion del Portal