Foros del Web » Programando para Internet » PHP »

Buscador PHP + MySQL ...

Estas en el tema de Buscador PHP + MySQL ... en el foro de PHP en Foros del Web. Hola a todos... La cuestion que traigo esta vez es un buscador, tengo una tabla con productos, cada producto tiene un capo palabras_clave, que es ...
  #1 (permalink)  
Antiguo 10/04/2004, 21:29
 
Fecha de Ingreso: abril-2004
Mensajes: 30
Antigüedad: 13 años, 8 meses
Puntos: 0
Buscador PHP + MySQL ...

Hola a todos...

La cuestion que traigo esta vez es un buscador, tengo una tabla con productos, cada producto tiene un capo palabras_clave, que es sobre el que hago las consultas.

Estoy utilizando una metodologia descriminante para limpiar las cadenas que le mando al script que hace las busquedas, el tipo de usuario que utiliza el buscador es poco menos que un usuario normal, con esto quiero decir que hace consultas en un buscador de esta manera:

"Busco un proveedor de playeras blancas de algodon con bolitas azules marca TShirtBoy porque quiero comprar 20"

(un super mal uso del buscador, pero no los culpo son usuario que no estan tan acostumbrados al internet).

tons con el scrip que tengo para filtrar la cadena la consulta me queda asi:

"playeras algodon TShirtBoy", y pues ya de ese modo puedo hacer una consulta normal sobre el campo, la cuestion es que la cosa se complica cuando quiero mostar los resultados que contengan "playeras algodon TshirtBoy", "playeras algodon", "playeras TshirtBoy" y "algodon TshirtBoy"... o sea entregar los resultados que tengan las tres palabras + las que tengan solo dos palabras, hay casos en los cuales tengo consultas que despues de purgadas aun tienen 5 palabras.

Si a alguien se le ocurre un buen metodo o ya se ha enfrentado a esto antes, le pido ayuda por favor :).

Ya intente con UNION y las consultas tardan bastante, ya intente con busquedas FULLTEXT de mysql y es mas descriminante aun porque si una palabra se repite en el 50% de los campos la considera ruidosa y no la toma en cuenta y el problema se hace mas grande porque la base de datos posiblemente dentro de un mes o menos tenga cerca de 5000 productos. alguna metodologia que conoscan?

Gracias :)
  #2 (permalink)  
Antiguo 12/04/2004, 08:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Puedes desglosar tu cadena origien a buscar que contiene tus palabras (ya pre-filtradas como lo haces) para componer tu sentencia SQL condicional a base de bloques tipo:

SELECT * FROM tabla
WHERE
campo LIKE '%$palabras[1]%'
AND campo LIKE '%$palabras[2]%'
AND campo LIKE '%$palabras[N]%'

Tantos como palabras tengas .. Para eso usa explode() a tu cadena original de busqueda y compon los bloques SQL "condicionales" necesarios ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/04/2004, 11:52
 
Fecha de Ingreso: abril-2004
Mensajes: 30
Antigüedad: 13 años, 8 meses
Puntos: 0
Muchas gracias...Cluster

Pero eso ya lo he venido haciendo... y pues con ese tipo de consultas es obvio que solo me va a entregar los campos que coincidan con todas las palabras.

Vuelvo a lo mismo como le hago para encontrar digamos:

"playera tishirtboy algodon"

buscar primero resultados que contengan las tres palabras
luego resultados que contengan dos de esas palabras

...pero de una manera mas optima, por ejemplo el fulltext de mysql es bastante bueno, la cuestion es que cuando ya tienes muchos productos se porta bastante descriminante y te elimina palbras que se consideran ruidosas por aparecer en el 50% de los campos
  #4 (permalink)  
Antiguo 12/04/2004, 14:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Puedes usar OR como operador también.

El coso es componer tu sentencia SQL adecuada a base de grupos de condicionales .. deacuerdo a tu lógica que detallas

(campo=valor AND campo=valor) or (campo=valor) .. etc ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:21.