Articulos PHP
Octubre 06, 2008, 03:43:51 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Canciones Traducidas - Daforos.com - Fondos Gratis - Portatiles - Hosting - - Recursos Gratuitos Webmaster - elhacker dragonjar - sexo gratis - letras de canciones - Trucos Gratis - Juegos Gratis - Sexe gratuit - Juegos De Coche - porno - Start - Page0 - Page1 - Page2 - Page3 - Page4 - Page5 - Page6 - Page7 - Page8 - Page9 - Page10Page11 - Page12 - Page13 - Page14 - Page15 - Page16 - Page17 - Page18 - Page19 - Page20Page21 - Page22 - Page23 - Page24 - Page25 - Page26 - Page27 - Page28 - Page29 -

Páginas: 1   Ir Abajo
  Imprimir  
Autor Tema: "Full-Text", busquedas de cadenas de carácteres  (Leído 3735 veces)
administrador
Administrator
Hero Member
*****
Desconectado Desconectado

Mensajes: 16726


Ver Perfil
« : Septiembre 17, 2004, 12:14:36 »

MySQL, a partir de su versión 3.23.23 permite realizar búsquedas dentro de un campo a partir de una cadena de caracteres con la sentencia "FULL-TEXT".

El método de búsqueda sencillo dentro de una tabla es utilizar LIKE:

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

El problema aparece cuando en vez de una sola palabra són varias las que hay que buscar:

Si "$palabra" equivale, por ejemplo, a "HTML PHP", una frase dentro de los textos almacenados que sea "HTML y PHP" no estará entre los resultados debido a que contiene una "y" entre las dos palabras buscadas.

Peró si usamos "Full-text" MySQL se encargará de comparar la cadena que le pasemos con los contenidos de la tabla y devolvera los resultados aproximados.

Limitaciones de "Full-text":
No devuelve resultados si la palabra aparece demasiadas veces en los registros.
Si más del 50% de los registros contienen la palabra buscada no devolverá resultados. Esto es debido a que esta función está pensada para tablas con muchos registros y no tendría sentido devolverlos todos, ya que no seria práctico que en una tabla de 10.000 registros con el 50% de los textos conteniendo la palabra buscada se nos devolviera un resultado de 5.000 registros.

Por esta razón la consulta omitirá palabras demasiado comunes, como preposiciones y artículos (de, con, a, el)...

Requisitos 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.

Lo primero 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
ALTER TABLE articulos ADD FULLTEXT(texto);

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

Para las consultas 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')
Con lo que le indicamos al MySQL seleccionar los campos "titulo" y "texto" de "artículos", filtrando donde haya coincidencias en el campo "texto" para la variable "$palabras".

MySQL puede devolver wl Score que biene a ser un número que indica el valor de coincidencia en cada registro. Su valor puede ir desde casi cero hasta más de cuatro. Es útil para ordenar los resultados por orden de coincidencia.

La consulta sería:
SELECT titulo,texto, MATCH(texto) AGAINST('$palabras') AS coincidencia
FROM articulos
WHERE MATCH(texto) AGAINST ('$palabras')
ORDER BY coincidencia DESC

En línea
zagalet
Newbie
*
Desconectado Desconectado

Mensajes: 1


Ver Perfil Email
« Respuesta #1 : Marzo 04, 2005, 03:22:09 »

Estoy realizando una busqueda con MATCH AGAINST y las ordeno por la puntuacion que te devuelve MySQL, el problema es que realiza una busqueda logicamente contraria a lo que haria un buscador como por ejemplo Google:

si pongo 'patatas' -> devuelve 50 registros

si lo quiero limitar a los que sean solo patatas bravas entonces me devuelve los 50 de antes ( donde hay cinco con la palabra 'bravas' que me salen los primeros al ordenar por puntuacion) más otro 10 en los que sale la palaba 'bravas' y no la palabra 'patatas'

Lo logico seria que restringiera la busqueda a las palabras coincidentes ( funcion AND ) y no todas las encontradas (OR)
En línea
Páginas: 1   Ir Arriba
  Imprimir  
 
Ir a:  

Mas buscadas: apuntes audio belleza bolsa cancer carpet carrera casas computadora credito cross curso informatica divx dolar drivers e mule economia explorer grafica hardware higiene industria industrial informatica internet libros linux mantenimiento manuales media medicina nutricion online paginas web politica posicionamiento programacion red red alert salud seguro seo software tecnologia trucos windows universidad venta video web windows winrar

UseBB Port by Gaia Modified & Upgraded by Croco Articulos PHP | Impulsado por SMF 1.1.6.
© 2005, Simple Machines LLC. Todos los Derechos Reservados.

Página creada en 0.088 segundos con 19 consultas.