Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Buscador óptimo

Estas en el tema de Buscador óptimo en el foro de Mysql en Foros del Web. Hola a todos! les comento que hace rato estoy tratando de implementar en un sitio un buscador óptimo. Lo intenté hacer con índices fulltext pero ...
  #1 (permalink)  
Antiguo 01/09/2011, 06:38
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Buscador óptimo

Hola a todos! les comento que hace rato estoy tratando de implementar en un sitio un buscador óptimo. Lo intenté hacer con índices fulltext pero lo que me suele suceder es que me muestra muchos resultados que incluso no tienen que ver con las palabras que se ingresa (salvo algún "la" o "de", por ejemplo) y hace que muestre resultados imprecisos. Por lo que yo no se en cuánta cantidad de lineas limitar la consulta ya que eso depende de lo que se está buscando.

Como me pedían algo más preciso, hice un buscador con like, pero es tan preciso que si uno se olvida una letra o algo, ya no encuentra resultados:

Código:
SELECT * FROM libros WHERE autor like '%".$a_buscar."%' or seg_autor like '%".$a_buscar."%' or resto_a like '%".$a_buscar."%'
La consulta que usaba anteriormente con los índices fulltext era:
Código:
SELECT * FROM libros WHERE MATCH (titulo, autor, subtit, seg_autor, resto_a) AGAINST ('$a_buscar')
Bueno, no se si me explico, pero agradecería si alguien me puede ayudar a optimizar mi buscador para que me muestre los resultados sin necesidad de escribir algo puntual pero que tampoco me arroje resultados que tan sólo coincide en una palabra sin demasiada importancia, como son los articulos por ejemplo.

Saludos!! Y muchas gracias desde ya!!
  #2 (permalink)  
Antiguo 01/09/2011, 21:41
Avatar de winderj90  
Fecha de Ingreso: agosto-2011
Ubicación: Caracas - Venezuela
Mensajes: 8
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: Buscador óptimo

la sentencia q haces esta bien estructurada pero el problema que veo esta en el modo como utilizas el signo "%", te explico, ese signo es como si fuera un completador, ejemplo:

VALORES EN LA TABLA A CONSULTAR: MARIA, MIRIAN, MARIANELA, MARIANGEL

CASO 1: SI BUSCAS '%RIA%' - RESULTADO = MARIA, MIRIAN, MARIANELA, MARIANGEL.

CASO 2: SI BUSCAS '%RIA' - RESULTADO = MARIA.

CASO 3 : SI BUSCAS 'MA%' - RESULTADO = MARIA, MARIANELA, MARIANGEL.

PARA TU CONSULTA TE RECOMIENDO EL CASO 3.

espero te sirva de algo... y si te sirve xfavor no te olvides del karma...
  #3 (permalink)  
Antiguo 12/09/2011, 10:02
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Buscador óptimo

Cita:
Iniciado por winderj90 Ver Mensaje
la sentencia q haces esta bien estructurada pero el problema que veo esta en el modo como utilizas el signo "%", te explico, ese signo es como si fuera un completador, ejemplo:

VALORES EN LA TABLA A CONSULTAR: MARIA, MIRIAN, MARIANELA, MARIANGEL

CASO 1: SI BUSCAS '%RIA%' - RESULTADO = MARIA, MIRIAN, MARIANELA, MARIANGEL.

CASO 2: SI BUSCAS '%RIA' - RESULTADO = MARIA.

CASO 3 : SI BUSCAS 'MA%' - RESULTADO = MARIA, MARIANELA, MARIANGEL.

PARA TU CONSULTA TE RECOMIENDO EL CASO 3.

espero te sirva de algo... y si te sirve xfavor no te olvides del karma...
Hola y antes que nada mil disculpas por no poder responder antes!!!
Te comento que esto no me está funcionando, al menos en uno de los casos que más me importa, paso a contar:
si quiero buscar "sector de Recursos Humanos" , pero pongo en el buscador todo menos "de", es decir "sector Recursos Humanos", no me devuelve ningún resultado por lo que mi buscador es más que poco óptimo ya que la gente que lo utilice no pondrá todo textual.
Lo probé haciendo de las tres formas que mencionas arriba pero siempre lo mismo: no devuelve nada la consulta.
Se ve que, como está hecho es más adecuado si se busca de una palabra, pero no va a ser mi caso.

Alguna sugerencia?
Muchas gracias y ahora podré responder más rápidamente! Saludos!!
  #4 (permalink)  
Antiguo 12/09/2011, 12:30
Avatar de winderj90  
Fecha de Ingreso: agosto-2011
Ubicación: Caracas - Venezuela
Mensajes: 8
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: Buscador óptimo

Bueno la manera q veo de hacerlo mas optimo es asi:
si buscar x autor: autor='$autor%' --Para que te traiga algo mas concreto
x titulo: titulo='%$titulo% -- Asi te traera todo lo q pongan.

El codigo que daria asi:
Código:
SELECT * FROM libros WHERE autor like '".$a_buscar."%' or seg_autor like '%".$a_buscar."%' or resto_a like '%".$a_buscar."%'

Tambien podrias poner las opciones en un select, es decir, autor y titulo para q asi busques en los campos que elijan xq como esta el codigo si pones una "A" te la buscara en los 3 campos y te traera todas las "A" q consiga en los 3 campos y es x eso q dices q a veces te trae cosas q no tiene nada q ver.

Prueba con el codigo q te puse sino has como te dije despues y asi sera mas especifico a la hora de buscar... Cualquier duda me avisas...
  #5 (permalink)  
Antiguo 12/09/2011, 16:29
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Buscador óptimo

Cita:
Iniciado por winderj90 Ver Mensaje
Bueno la manera q veo de hacerlo mas optimo es asi:
si buscar x autor: autor='$autor%' --Para que te traiga algo mas concreto
x titulo: titulo='%$titulo% -- Asi te traera todo lo q pongan.

El codigo que daria asi:
Código:
SELECT * FROM libros WHERE autor like '".$a_buscar."%' or seg_autor like '%".$a_buscar."%' or resto_a like '%".$a_buscar."%'

Tambien podrias poner las opciones en un select, es decir, autor y titulo para q asi busques en los campos que elijan xq como esta el codigo si pones una "A" te la buscara en los 3 campos y te traera todas las "A" q consiga en los 3 campos y es x eso q dices q a veces te trae cosas q no tiene nada q ver.

Prueba con el codigo q te puse sino has como te dije despues y asi sera mas especifico a la hora de buscar... Cualquier duda me avisas...
Hola nuevamente! te cuento que el ejemplo que puse en el reply anterior sobre el caso que no me encuentra nada es con el título de un libro y, lo probé de varias maneras, por lo que claramente hay un problema con más de una palabra (por eso al comienzo había usado índices fulltext, pero tampoco se como optimizar dichas consultas).
El buscador consiste en búsqueda normal: donde uno pone algo y te busca por cualquier criterio o campo, digamos; y búsqueda avanzada: donde ahí sí elijen por autor, titulo, etc y es más específica.
Sucede que varias personas están utilizando la búsqueda general y es por esto que el buscador debería mostrar resultados sino pareciera como si un producto no se encuentra y no es así.

Leyendo encontré que recomiendan que detecte cuántas palabras ingresa la persona y, si es una sola que lo haga mediante like, si son más de una mediante índices fulltext (pero el problema en este caso es que me da resultados por demás y busca que coincide hasta en las preposiciones: de, para, etc..., entonces me arroja excesivos resultados que no tienen que ver salvo en algún "de" -por ejemplo- y tampoco puedo limitar la consulta porque varía el nro. de resutlados que realmente son útiles).

Bueno, perdón que me extendí escribiendo, gracias nuevamente por intentar ayudarme. Ojalá con todo esto que estoy comentando, podamos encontrar la solución a mi problema. Saludos!!
  #6 (permalink)  
Antiguo 13/09/2011, 05:31
Avatar de winderj90  
Fecha de Ingreso: agosto-2011
Ubicación: Caracas - Venezuela
Mensajes: 8
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: Buscador óptimo

si quieres me pasas la estructura de la tabla con 2 insert para probar a ver si lo puedo hacer...
  #7 (permalink)  
Antiguo 14/09/2011, 18:47
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Buscador óptimo

Cita:
Iniciado por winderj90 Ver Mensaje
si quieres me pasas la estructura de la tabla con 2 insert para probar a ver si lo puedo hacer...
Bueno, acá te mando todo, desde ya te agradezco por tu buena voluntad para ayudarme!!:

Código:
CREATE TABLE IF NOT EXISTS `librosBuscador` (
  `titulo` varchar(250) character set latin1 default NULL,
  `autor` varchar(200) character set latin1 default NULL,
  `edit` varchar(50) character set latin1 default NULL,
  `subtit` varchar(200) character set latin1 default NULL,
  `seg_autor` varchar(100) character set latin1 default NULL,
  `resto_a` varchar(100) character set latin1 default NULL,
  `id` int(11) NOT NULL auto_increment,
   PRIMARY KEY  (`id`),
  FULLTEXT KEY `titulo` (`titulo`,`autor`,`subtit`,`seg_autor`,`resto_a`,`edit`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


INSERT INTO `librosBuscador` (`titulo`, `autor`, `edit`, `subtit`, `seg_autor`, `resto_a`) VALUES
('Sector de Recursos Humanos', 'Elautor Delibro', 'Editorial1', 'Este texto está dirigido a Recursos Humanos', 'OtroAutor DelSector', NULL),
('Las pericias judiciales en la provincia', 'Rodolfo Tauro', 'Ediciones Judiciales', NULL, 'Alberto Carrazco', 'Elsa Perez');
Una de las consultas que hice y no me devolvió nada, fue:
Código:
SELECT * FROM librosBuscador WHERE autor like 'sector recursos humanos%' or seg_autor like '%sector recursos humanos%' or resto_a like '%sector recursos humanos%'
La idea es que en una variable yo tengo lo que quiere buscar y la inserto en la consulta quedando como arriba puse, y con eso hace like en todos los casos. Me explico?

Bueno, espero sirva de algo, saludos!!
  #8 (permalink)  
Antiguo 15/09/2011, 06:34
Avatar de winderj90  
Fecha de Ingreso: agosto-2011
Ubicación: Caracas - Venezuela
Mensajes: 8
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: Buscador óptimo

Si era verdad q no encontraba nada pero era xq buscaba la cadena completa asi q se me ocurrio separarla y a cada palabra ponerle el signo "%" y asi si lo encuentra, esto es lo q vas a hacer:

1ro. Separar la cadena de caracteres
Código:
$palabra=explode(' ', $CADENA); //
	       for($i=0;$i<count($palabra);$i++) {
                 $buscar.="%".$palabra[$i]."%";
               }
2do. Buscar:

Código:
SELECT * FROM librosBuscador WHERE autor LIKE '$buscar' OR titulo LIKE $buscar' OR resto_a LIKE '$buscar'
Ahora intenta asi y me avisas... Para aprovechar, tu sabes como empezar acumular karma? xq lo tengo en n/a lo q pasa es q soy nuevo en esto y quiero empezar acumular karma...
  #9 (permalink)  
Antiguo 15/09/2011, 11:51
 
Fecha de Ingreso: octubre-2009
Mensajes: 107
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: Buscador óptimo

Cita:
Iniciado por winderj90 Ver Mensaje
Si era verdad q no encontraba nada pero era xq buscaba la cadena completa asi q se me ocurrio separarla y a cada palabra ponerle el signo "%" y asi si lo encuentra, esto es lo q vas a hacer:

1ro. Separar la cadena de caracteres
Código:
$palabra=explode(' ', $CADENA); //
	       for($i=0;$i<count($palabra);$i++) {
                 $buscar.="%".$palabra[$i]."%";
               }
2do. Buscar:

Código:
SELECT * FROM librosBuscador WHERE autor LIKE '$buscar' OR titulo LIKE $buscar' OR resto_a LIKE '$buscar'
Ahora intenta asi y me avisas... Para aprovechar, tu sabes como empezar acumular karma? xq lo tengo en n/a lo q pasa es q soy nuevo en esto y quiero empezar acumular karma...

Hola!! Muchísimas gracias!! sólo tuve que modificar esto:
Código:
	      $buscar="%";
	       		for($i=0;$i<count($palabra);$i++) {
                	$buscar.=$palabra[$i]."%";
               	}
Porque sino me ponía un % de más, pero lo he probado y anda perfecto!!! Qué alegría!! :aplausos:

Lo del karma, no tengo mucha idea cómo es, quizás poniéndole a cada respuesta que uno recibe un "Me gustó, muchas gracias", eso supongo que te lo subirá. Ahora te lo doy y veremos si aumenta tu karma. Cualquier cosa avisame.

Saludos!! Gracias gracias nuevamente!!
  #10 (permalink)  
Antiguo 15/09/2011, 12:17
Avatar de winderj90  
Fecha de Ingreso: agosto-2011
Ubicación: Caracas - Venezuela
Mensajes: 8
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: Buscador óptimo

ahh q bien, bueno a mi me funciono si le pones el signo de los 2 lados es que despues si le ponen una sola palabra no te la va a buscar bien y de todas maneras no generara error, intentalo pa q veas...

y si era lo q me dijiste pero como al principio no me subio el karma y ya me habian dado puntos xq eso no sabia como hacer, gracias x el karma. estamos en contacto, cualquier vaina agregame pa cuando tengas dudas de algo...

Etiquetas: select, buscadores
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 10:50.