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

engañado por las búsquedas fulltext

Estas en el tema de engañado por las búsquedas fulltext en el foro de Mysql en Foros del Web. Hola a todos, estoy realizando un proyecto de una tienda online en la que se deben poder hacer búsquedas por multitud de criterios. Hasta hace ...
  #1 (permalink)  
Antiguo 11/04/2006, 05:11
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 4 meses
Puntos: 1
engañado por las búsquedas fulltext

Hola a todos,

estoy realizando un proyecto de una tienda online en la que se deben poder hacer búsquedas por multitud de criterios. Hasta hace bien poco las consultas de búsquedas las construía introduciendo condiciones en el WHERE del tipo
Código:
	WHERE Nombre LIKE '%palaba_a_buscar%'
Como no estaba seguro de la rapidez y fiabilidad de los resultados cambié el método y lo preparé para hacer búsquedas FULLTEXT (o de texto completo). Todo funciona bien (o eso creo) pero me he encontrado con un problema:

imaginad que tengo un producto llamado 'pantalones'. Pues bien, si busco el término 'pantalon' o 'pantalón' no me aparece en los resultados de la búsqueda. Sé que es debido al método seguido por las búsquedas fulltext (o de texto completo) pero creo que de este modo se están perdiendo muchos registros.

Así que no sé que hacer:

1. dejo el sistema de búsqueda como está
2. añado a los resultados obtenidos con fulltext los que obtendríamos buscando con LIKE '%palabra%' (con lo que, como mínimo, duplicamos el tiempo de búsqueda)
3. cambio el sistema de búsqueda ... necesitaría ideas de cómo hacerlo

¿Qué pensáis vosotros? ¿Cómo resuelvo este problema? ¿Cambio el sistema, propuesta [3] (en ese caso necesito ideas), u opto por modificar el existente [2]?

Gracias por las ideas

P.D. una última pregunta: ¿realmente son útiles las búsquedas de texto completo? Si no tiene la 'ultima' versión no puedes buscar palabras de menos de 4 letras, si la palabra buscada difiere en un letra de la que buscas no la encuentras, etc No sé que pensar al respecto.
__________________
http://www.nosoynadie.net/
  #2 (permalink)  
Antiguo 11/04/2006, 21:01
Avatar de Cbas  
Fecha de Ingreso: enero-2002
Ubicación: capital federal
Mensajes: 437
Antigüedad: 22 años, 3 meses
Puntos: 2
Yo dejarí el like así
WHERE Nombre LIKE 'palaba_a_buscar%'

O sea.. porque lo más lógico es que alguien ponga pantalon entonces te va a traer pantalon y pantalones.
POrque nadie buscaría por "antalo"

Me parece a mí

SALUDOS!
__________________
La Perfección es enemigo de lo bueno.
  #3 (permalink)  
Antiguo 11/04/2006, 22:05
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 3 meses
Puntos: 2
Bueno eso pasa por vos y tu criterio... si queres un proyecto serio no PUEDE NUNCA JAMAS suceder una falla en una busqueda... pensa que tiene que funcionar tan bien como GOOGLE, no pienses en que es "imposible" (eso es de marica o de olgazan).

En tu caso buscaria en google todos los tutoriales de "Como programar un buscador" hasta que consiga uno que me de los QUERIES justos. Tambien consultaria en el foro "BASES DE DATOS", hay buena onda ahi, a mi me ayudaron un monton de veces.

Ehm... no se, me leeria todo el manual "like" de mysql...

Desgraciadamente no soy un experto en las queries, y en poco tiempo tambien estare teniendo que buscar la misma info que estas necesitando vos ahora pq mi sitio tiene un buscador interno que planeo armar BIEN...

Prometo que cuando tenga terminado mi buscador lo posteo aca para que al menos podamos intercambiar ideas :)

SALUDOS!
  #4 (permalink)  
Antiguo 12/04/2006, 01:54
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 4 meses
Puntos: 1
Gracias chicos por las respuestas,

debido a la urgencia del proyecto, he modificado el buscador para usar LIKE en lugar de MATCH() AGAINST() (búsquedas de texto completo) pero en cuanto pueda seguiré mirando el tema. Me he quedado mosqueado con la utilidad de este típo de búsquedas, por el cuándo es mejor usar búsquedas tradicionales (con like) frente a las de texto completo.

Seguiré investigando y ya os cuento
__________________
http://www.nosoynadie.net/
  #5 (permalink)  
Antiguo 19/07/2006, 19:05
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Hola. Vi tu mensaje y ando buscando una ayuda con el tema búsquedas a base de datos. Tengo preparado el script de paginacion, conexion a la base, etc, pero no entiendo bien como se pasa desde la otra pagina php que tiene el formulario, la palabra o palabras que ingresa el usuario.
Y como la recibe mi script, y como ejecuta la consulta en sql.

Me podrias pasar el codigo para esto?
Espero haberme hecho entender.

Saludos y gracias,
  #6 (permalink)  
Antiguo 22/07/2006, 08:24
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 4 meses
Puntos: 1
Hola,

he visto este mensaje, y otros que has estado poniendo en los foros de PHP y MySQL. Veo que ya tienes preparada la paginación (con el paginator) pero no veo cual es el objetivo de tu web. Hablas de matrimonios, padres, hermanos, etc Dime:

1. ¿sobre qué va la web (o aplicación)?
2. ¿tienes diseñada ya la base de datos?
3. ¿tienes el formulario de búsqueda?

Dinos y te podremos ayudar ciao
__________________
http://www.nosoynadie.net/
  #7 (permalink)  
Antiguo 22/07/2006, 18:02
Avatar de solecoza  
Fecha de Ingreso: julio-2006
Mensajes: 126
Antigüedad: 17 años, 9 meses
Puntos: 0
Aiii si, claro que me pueden ayudar, y eso espero.
La web es sobre genealogía.
lo UNICO que me falta poder hacer es crear la sentencia SQL, y saber como tomar un texto que iongresan en un formulario de busqueda para ser procesado por el script paginator.

Te paso la estructura de la base y la sentencia que busco:

id
nombre
apellido
idmatrimonio
idmatrimoniopadres


La sentencia debe traerme nombre y apellido, nombre de los padres y su pareja (es decir, con idmatrimoniopadres debe rastrear a ambos por la tabla y con el idmatrimonio debe buscar a su pareja.)

GRACIAS!!!!

  #8 (permalink)  
Antiguo 10/08/2006, 19:49
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola Solecosa:

No conozco el paginator, pero te puedo ayudar con la sentencia SQL.

Con FullText, necesitarías modificar tu tabla (lo puedes hacer en el phpMyAdmin) para crear un grupo de campos como un sólo índice FullText de este modo:

ALTER TABLE `html` DROP INDEX `tu_indice` ,
ADD FULLTEXT `tu_indice` ( `nombre` ,
`apellido`
)

Luego tu consulta debería ser algo como esto:

$sql = "SELECT * FROM tu_tabla WHERE MATCH(nombre, apellido) AGAINST(".$cadena_a_encontrar.")";

Para armar los vínculos, sólo armas el src del link con los valores correspondientes para pasar los parámetros

Espero haber sido de ayuda.
  #9 (permalink)  
Antiguo 11/08/2006, 01:32
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 18 años, 4 meses
Puntos: 1
Hola escoffie,

cuando solecoza creo este post, lo duplicó en este otro [1] donde se planteó alguna posible solución (te lo pongo por si te interesa). Ciao

[1] http://www.forosdelweb.com/f86/quien-arma-esta-sentencia-pliiiisss-411232/#post1643351
__________________
http://www.nosoynadie.net/
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 18:22.