I n i c i o
Temas |
 |
Más Contenidos |
 |

EVIDALIA HOSTING

 100 MB espacio en disco
 1 GB transferencia/mes
 25 E-Mail's POP3
mySQL, php, CGI-BIN
 |

 200 MB espacio en disco
 2 GB transferencia/mes
 50 E-Mail's POP3
mySQL, php, CGI-BIN
 |
|

|
Guías Informática: |
|
Categoría:
Bases de Datos
Búsquedas con Full-text y MySQL |
|
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
http://www.ultradev-es.com |
|
|
| Visitas:
5777 Fecha:
2003-08-10 |
|
|
|
|

|
Páginas Amigas
|
 |
|