Foros del Web » Programando para Internet » PHP »

Mejorar busquedas usando LIKE

Estas en el tema de Mejorar busquedas usando LIKE en el foro de PHP en Foros del Web. Hola gente: Estoy haciendo un pequeño buscador y me encontre con algunos problemas. El principal es el siguiente: Como puedo hacer para que muestre los ...
  #1 (permalink)  
Antiguo 20/12/2005, 19:52
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
Mejorar busquedas usando LIKE

Hola gente:

Estoy haciendo un pequeño buscador y me encontre con algunos problemas. El principal es el siguiente:

Como puedo hacer para que muestre los resultados que tengan X cantidad de porcentaje de las palabras a buscar ¿?

A ver como lo explico: quiero que si alguien ingresa las palabras "programacion orientada a objetos en PHP" no me liste solo las que tienen esa frace complete, como lo hace actualmente, actualmente hago esto:

Código PHP:
$var "%".$var."%";
$_SQL mysql_query("SELECT * FROM `db` WHERE `keys` LIKE '$var' OR `desc` LIKE '$var'");
while(
$r=mysql_fetch_assoc($_SQL)) {
  
//imprimo los resultados 
Esto me mostrara solo los sitios que tengan la frase exacta, pero yo quisiera que tambien me muestre los sitios que tengan las palabras "programacion en php", me explico? que liste los sitios que tengan en su descripción (o keys) el 50% (esto es un decir) de las palabras usadas en la busqueda...

Otra forma podría ser buscar CADA UNA de las plabras (descartando los "de", "con", etc), pero primero quisiera saber si lo otro es posible...

Espero que se haya entendido lo que pretendo y que alguien me de una mano...
__________________
I Love Programming...
  #2 (permalink)  
Antiguo 20/12/2005, 21:37
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 10 meses
Puntos: 7
http://www.google.com/search?q=full+text+mysql

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 20/12/2005, 23:06
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 11 meses
Puntos: 2
Código PHP:
$_SQL mysql_query("SELECT * FROM `db` WHERE `keys` LIKE '%$var%' OR `desc` LIKE '%$var%'"); 
saludos.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #4 (permalink)  
Antiguo 21/12/2005, 01:10
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
Quest, no entiendo tu mensaje, estas poniendo el mismo codigo que di yo... creo que no entendiste mi pedido.

xknown, gracias por el link eso se lo que busco ;)
__________________
I Love Programming...
  #5 (permalink)  
Antiguo 21/12/2005, 01:13
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 9 meses
Puntos: 0
no está poniendo lo mismo que tu, el pone:
like '%$var%' y no like '$var'
  #6 (permalink)  
Antiguo 21/12/2005, 01:21
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 21 años, 11 meses
Puntos: 2
Cita:
Iniciado por FuLaNo_
Quest, no entiendo tu mensaje, estas poniendo el mismo codigo que di yo... creo que no entendiste mi pedido.

xknown, gracias por el link eso se lo que busco ;)
tamos corto de vista parece... hehehe fijate bien.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #7 (permalink)  
Antiguo 21/12/2005, 02:58
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
... lo mismo digo ;) la primer linea de mi codigo es:

Código PHP:
$var "%".$var."%"
__________________
I Love Programming...
  #8 (permalink)  
Antiguo 21/12/2005, 06:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Como ya te han comentado .. el tema del "porcentaje de palabras" en la busqueda se controla muy bien con las técnicas de Busqueda de texto completo (Full Text Serarch) .. Entre otras cosas ese tipo de busquedas te dán un resultado sobre la "relevancia" .. es decir, el procentajes de veces que se cumple las apariciones de las palabras a buscar en los campos que indicas. Así puedes ordenar por ese campo y dar como primeros resultados los que más veces aparezca tu termino(s).

Un buen tutorial al respecto:
http://www.mysql-hispano.org/page.php?id=15

Un saludo,
  #9 (permalink)  
Antiguo 21/12/2005, 11:24
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
Hola Cluester, justamente anoche cuando xknown me paso la URL lo primero que hice fue ir a mysql-hispano, alli logre hacer esto:

Código PHP:
SELECT `title`, `url`, `desc`, `keys`, MATCH(`desc`,`keys`) AGAINST('$var' IN BOOLEAN MODE) AS `ScoreFROM `dbWHERE MATCH(`desc`,`keys`) AGAINST('$var') AND `state` = 1 ORDER BY `ptsDESC, `ScoreDESC 
Si tenes alguna idea para mejorarlo pues escucho -o leo-

El unico problema que tengo es utilizar las comillas en BOOLEAN MODE, supuestamente entrecomillando una frase deberia buscarla exactamene como esta, pero no consigo hacerlo... en mis busquedas es lo mismo escribir "racing club de avellaneda" que racing club de avellaneda (cuando no tendría que ser lo mismo)...

Saludos y gracias por la ayuda.

PD: pueden ver como esta funcionando en www.buscalinks.com.ar
__________________
I Love Programming...
  #10 (permalink)  
Antiguo 11/01/2006, 01:36
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 9 meses
Puntos: 5
Cita:
Iniciado por FuLaNo_
El unico problema que tengo es utilizar las comillas en BOOLEAN MODE, supuestamente entrecomillando una frase deberia buscarla exactamene como esta, pero no consigo hacerlo... en mis busquedas es lo mismo escribir "racing club de avellaneda" que racing club de avellaneda (cuando no tendría que ser lo mismo)...
... Amigo Lograste solucionar lo de las "palabras en comillas" yo tambien tengo ese mismo problema.- y la verdad no veo como solucionarlo.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #11 (permalink)  
Antiguo 11/01/2006, 02:23
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
Si lo hice, mi error era bastante torpe

Código PHP:
SELECT `title`, `url`, `desc`, `keys`, MATCH(`desc`,`keys`) AGAINST('$var' IN BOOLEAN MODE) AS `ScoreFROM `dbWHERE MATCH(`desc`,`keys`) AGAINST('$var'  IN BOOLEAN MODE) AND `state` = 1 ORDER BY `ptsDESC, `ScoreDESC 
El problema era que estaba usando "IN BOOLEAN MODE" SOLO en el primer AGAINST(), entonces no me lo estaba tomando...
__________________
I Love Programming...
  #12 (permalink)  
Antiguo 11/01/2006, 15:28
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 9 meses
Puntos: 5
Bueno amigo, lo coloque igual que tu y ahora si puedo usar palabras con comillas...

ahora bien?!
el único inconveniente que se me a generado ahora en la búsqueda es lo siguiente :

como puede bajar el rango de caracteres permitido para las palabras
ósea;
so coloco la palabra sms o hoy no arroja ningún resultado la búsqueda por que al parecer la palabra debe de tener un mínimo de cuatro (4) caracteres para que el la búsqueda la tome...

hay que hacer algo en los campos del MySQL para bajar ese criterio que en ves que sea 4 sean un mínimo de tres caracteres?

sabes como hacerlo?

Gracias.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #13 (permalink)  
Antiguo 11/01/2006, 17:08
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
Habia escuchado un metodo para correguir eso de mysql, pero no recuerdo donde lo habia visto, realmente no le di importancia puesto que no tengo acceso a la configuracion del servidor mysql (es decir, en local si, pero de que me sirve si en el hosting "real" no puede tocar nada?)

Ademas creo que el minimo de 4 caracteres es perfecto, de lo contrario permitirias palabras como "con", "los", "las", etc... que pueden generar miles de resultados sin ningun sentido... por ello esta funcion de SQL elimina (o no toma en cuenta) palabras que puedan ser muy generales...

PD: si quieres buscar SMS agregale un espacio a la derecha...
__________________
I Love Programming...
  #14 (permalink)  
Antiguo 11/01/2006, 17:23
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 9 meses
Puntos: 5
eso de agregar un espacio a las palabras importantes de 3 caracteres ... es lo mejor que se puede hacer....


ya que con una cuentica de hosting uno esta muy limitado.... es la mejor forma de solucional ese problema

Gracias.- :)
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #15 (permalink)  
Antiguo 12/01/2006, 01:29
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 9 meses
Puntos: 0
SELECT `title`, `url`, `desc`, `keys`, MATCH(`desc`,`keys`) AGAINST('$var' IN BOOLEAN MODE) AS `Score` FROM `db` WHERE MATCH(`desc`,`keys`) AGAINST('$var' IN BOOLEAN MODE) AND `state` = 1 ORDER BY `pts` DESC, `Score` DESC

donde tiene esto el limite de 4 caracteres del que hablais? o es una limitacion del full text

que quiere decir state` = 1 ¿?

saludos
  #16 (permalink)  
Antiguo 12/01/2006, 07:31
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 9 meses
Puntos: 5
Cita:
Iniciado por cyborg
SELECT `title`, `url`, `desc`, `keys`, MATCH(`desc`,`keys`) AGAINST('$var' IN BOOLEAN MODE) AS `Score` FROM `db` WHERE MATCH(`desc`,`keys`) AGAINST('$var' IN BOOLEAN MODE) AND `state` = 1 ORDER BY `pts` DESC, `Score` DESC

donde tiene esto el limite de 4 caracteres del que hablais? o es una limitacion del full text

que quiere decir state` = 1 ¿?

saludos
... Creo que eso no tiene nada que ver como armes la sentencia de busqueda,.. las palabras segun tengo entendido como lo explico Fulano_ tiene que ver con la configuracion del MySQL en el servidor ...
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #17 (permalink)  
Antiguo 12/01/2006, 13:15
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 21 años, 6 meses
Puntos: 2
los cuatros caracteres minimos es una condicion de FULLTEXT.

El campo state no es mas que un campo en el cual identifico si el link ha sido aprobado o no...
__________________
I Love Programming...
  #18 (permalink)  
Antiguo 12/01/2006, 14:58
 
Fecha de Ingreso: febrero-2004
Ubicación: España. Madrid
Mensajes: 454
Antigüedad: 20 años, 9 meses
Puntos: 0
ah vale que state es un campo de tu tabla :p
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 12:13.