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

podra mi diseño afectar los resultados de una busqueda

Estas en el tema de podra mi diseño afectar los resultados de una busqueda en el foro de Mysql en Foros del Web. Hola, tengo esta tabla Código: CREATE TABLE `hunters` ( `hunter_id` bigint(11) NOT NULL auto_increment, `hunter_fecha_ingreso` date default NULL, `hunter_nombre` varchar(100) default NULL, `hunter_fecha_nacimiento` date default ...
  #1 (permalink)  
Antiguo 15/01/2008, 09:47
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
podra mi diseño afectar los resultados de una busqueda

Hola, tengo esta tabla

Código:
CREATE TABLE `hunters` (
  `hunter_id` bigint(11) NOT NULL auto_increment,
  `hunter_fecha_ingreso` date default NULL,
  `hunter_nombre` varchar(100) default NULL,
  `hunter_fecha_nacimiento` date default NULL,
  `sexo_id` int(11) default NULL,
  `hunter_direccion` varchar(255) default NULL,
  `hunter_telefono` int(11) default NULL,
  `hunter_telefono2` char(10) default NULL,
  `patrono_id` int(11) default NULL,
  `hunter_nombre_referencia` varchar(100) default NULL,
  `hunter_direccion_referencia` varchar(255) default NULL,
  `hunter_telefono_referencia` int(11) default NULL,
  `hunter_isss` char(20) default NULL,
  `hunter_salario` decimal(11,2) default NULL,
  `hunter_dui` char(20) default NULL,
  `hunter_nit` char(20) default NULL,
  `hunter_licencia` char(20) default NULL,
  `estado_civil_id` int(11) default NULL,
  `departamento_id` int(11) default NULL,
  `municipio_id` int(11) default NULL,
  PRIMARY KEY  (`hunter_id`),
  KEY `patrono` (`patrono_id`),
  KEY `depto` (`departamento_id`),
  KEY `municipio` (`municipio_id`),
  FULLTEXT KEY `todos` (`hunter_nombre`,`hunter_direccion`,`hunter_isss`,`hunter_dui`,`hunter_nit`,`hunter_licencia`)
) ENGINE=MyISAM AUTO_INCREMENT=12272558 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED
y pues en este momento no recuerdo porque puse el nombre completo de las personas en un solo campo y no en campos separados, nose si afectara.
Tengo el siguiente caso, busco a una persona que se llama CARLOS RIVAS, pero cuantos carlos rivas habran, miles, si no es que millones, pues el primer resultado que me entrega es

RIVAS RIVAS CARLOS EDWIN
RIVAS RIVAS CARLOS ARMANDO
ORELLANA RIVAS CARLOS BALMORE

etc etc pero la coincidencia CARLOS RIVAS, no aparece sino como hasta el registro 300 lo cual me ha parecido extraño.
Pues cree una copia de la tabla e indices, e introduje datos manualmente para corroborar mi problema, pero cual fue mi sorpresa, con unos 20 registros que he puesto manualmente, el resultado siempre es el mismo, los registros me los devuelve asi

CARLOS RIVAS
RIVAS CARLOS
Martinez Rivas Alfonzo Carlos
Rivas Rivas Carlos eduardo

etc, es decir, primero me duelve solo lo que dice CARLOS RIVAS o invertido, porque en el otro no me funciona igual?

el query es el siguiente en ambos casos:

Código:
SELECT a.hunter_nombre,
MATCH (a.hunter_nombre,a.hunter_direccion,a.hunter_dui,a.hunter_isss,a.hunter_licencia,a.hunter_nit) 
AGAINST ('Carlos Rivas') as puntuacion
FROM hunters a 
WHERE MATCH (a.hunter_nombre,a.hunter_direccion,a.hunter_dui,a.hunter_isss,a.hunter_licencia,a.hunter_nit) 
AGAINST ('Carlos Rivas')
espero que me puedan orientar. Gracias
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #2 (permalink)  
Antiguo 15/01/2008, 11:59
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: podra mi diseño afectar los resultados de una busqueda

Hola de nuevo xcars.

Con pocos registros, el comportamiento de un Full-text index es bastante extraño... yo no me fijaría mucho en una prueba con sólo 20 registros.

Ahora bien, entiendo perfectamente por qué te devuelve primero:
RIVAS RIVAS CARLOS EDWIN
que
CARLOS RIVAS.

El indice full-text está pensado para hacer una búsqueda en la que a los registros se le da una relevancia según cuán relevante es una palabra en su texto (de forma estadística).
En la documentación de MySQL explica el algoritmo a gran escala, sin embargo, lo que aquí interesa es que "RIVAS RIVAS CARLOS EDWIN" dice la palabra RIVAS más veces que "RIVAS CARLOS" y dice Carlos la misma cantidad de veces.

Un índice full-text no es lo más apropiado para realizar búsquedas de este tipo... precisamente porque está pensado para indexar textos y no strings tan cortos.
  #3 (permalink)  
Antiguo 15/01/2008, 12:14
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: podra mi diseño afectar los resultados de una busqueda

pues lo mismo pense ye, pero voila en la otra tabla con 20 registros, tambien esta el nombre RIVAS RIVAS CARLOS EDWIN pero es el ultimo en entregarme, entonces no le encuentra logica en porque en la tabla completa es el primero y donde solo hay unos pocos registros si es el ultimo.
Ahora para el ultimo comentario, la busqueda yo la puedo realizar por varios campos, lo importante aca es poder identificar a alguien, por los homonimos, entonces yo podria poner CARLOS RIVAS STA. LUCIA por ejemplo para que la relevancia la saque con las otras dos palabras, (STA. LUCIA es una parte de la direccion) y todos los nombres estan completos, pero en el caso de CARLOS RIVAS, esta persona no tiene segundo apellido ni segundo nombre, entonces no siempre es que sean cortos, sinio mas bien hay casos extranos.

Cita:
Iniciado por pragone Ver Mensaje
Hola de nuevo xcars.

Con pocos registros, el comportamiento de un Full-text index es bastante extraño... yo no me fijaría mucho en una prueba con sólo 20 registros.

Ahora bien, entiendo perfectamente por qué te devuelve primero:
RIVAS RIVAS CARLOS EDWIN
que
CARLOS RIVAS.

El indice full-text está pensado para hacer una búsqueda en la que a los registros se le da una relevancia según cuán relevante es una palabra en su texto (de forma estadística).
En la documentación de MySQL explica el algoritmo a gran escala, sin embargo, lo que aquí interesa es que "RIVAS RIVAS CARLOS EDWIN" dice la palabra RIVAS más veces que "RIVAS CARLOS" y dice Carlos la misma cantidad de veces.

Un índice full-text no es lo más apropiado para realizar búsquedas de este tipo... precisamente porque está pensado para indexar textos y no strings tan cortos.
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #4 (permalink)  
Antiguo 15/01/2008, 12:24
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: podra mi diseño afectar los resultados de una busqueda

Cita:
Iniciado por pragone Ver Mensaje
Un índice full-text no es lo más apropiado para realizar búsquedas de este tipo... precisamente porque está pensado para indexar textos y no strings tan cortos.
y que me recomiendas entonces, considerando que mi base es de 10 Millones de registros?
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #5 (permalink)  
Antiguo 15/01/2008, 13:16
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: podra mi diseño afectar los resultados de una busqueda

Pues no está fácil...

A ver a lo que me refiero con que full-text no es lo más apropiado, es simplemente porque toma un enfoque probabilistico para establecer la relevancia (lo cual va de maravilla para textos largos)... pero no para lo que necesitas.... sin embargo entiendo tu situación y no es sencilla...

Hay algún tipo de patrón que se pudiera utilizar para las búsquedas... no sé, algo como que lo que busques siempre es el principio de un campo (en ese caso un LIKE resolvería todo) o que sólo te interese que las palabras estén en ese orden y sin palabras en medio (exact match)??
  #6 (permalink)  
Antiguo 15/01/2008, 14:01
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: podra mi diseño afectar los resultados de una busqueda

pues mira, la idea es ubicar a una persona, y pues como hay homonimos, y a veces se tienen algunos nombres y apellidos y en otras ocasiones, mas facil, tienen los numeros de sus documentos, pero el 90% de los casos, sino mas, se tiene el nombre o parte del nombre, y pues, considerando mi nombre, puedes tener HAROLD STANLEY RIVAS, HAROLD S. RIVAS, HAROLD RIVAS, HAROLD RIVAS MARTINEZ, y el usuario puede escribir primero nombres y luego apellidos, o a veces puedes poner por ejemplo HAROLD RIVAS y te aparecen que 100 personas que se llaman asi, y tienes que tener un diferencial, pues para eso agregue la direccion, para que puedas poner una parte parcial de la direccion en la busqueda y asi obtener un mejor resultado, y pues la idea es hacer esto lo mas facil posible y por eso en el formulario unicamente tengo un campo de "texto a buscar" y ahi puedes poner nombre o parte, direccion o parte, numeros de documento, etc entonces en base a esto es que decidi por full-text search y considerando la cantidad de registros claro.
Asi que nose que mas podrias sugerirme...

Cita:
Iniciado por pragone Ver Mensaje
Pues no está fácil...

A ver a lo que me refiero con que full-text no es lo más apropiado, es simplemente porque toma un enfoque probabilistico para establecer la relevancia (lo cual va de maravilla para textos largos)... pero no para lo que necesitas.... sin embargo entiendo tu situación y no es sencilla...

Hay algún tipo de patrón que se pudiera utilizar para las búsquedas... no sé, algo como que lo que busques siempre es el principio de un campo (en ese caso un LIKE resolvería todo) o que sólo te interese que las palabras estén en ese orden y sin palabras en medio (exact match)??
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #7 (permalink)  
Antiguo 16/01/2008, 14:38
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: podra mi diseño afectar los resultados de una busqueda

Hola xcars,

He estado pensando un poco en el problema... y hay algo que se me ocurre (aunque no lo tengo claro). Según he visto, cuando la búsqueda en el Full-text search la haces en Boolean Mode, me parece que la relevancia se calcula de una forma diferente... no tengo muy claro cómo, pero tienes razón en que un fulltext es lo más cercano a resolver el problema, pero no termina de servir... así que lo investigaría

Otra idea es que en lugar de ordenar por el Match de todas las columnas, ordenes por otro Match que sólo incluya el nombre... o que ponderes ese con algún peso sobre el Match general.

Siento no ser de más ayuda :(
__________________
pragone
Blog: Desarrollo, comunidad y monetización
Últimos artículos: Tips de Smarty
  #8 (permalink)  
Antiguo 16/01/2008, 14:41
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Re: podra mi diseño afectar los resultados de una busqueda

Hola, no realizo en boolean mode porque no me devuelve lo que yo espero. Y pues creeme que me siento frustrado, ni en el foro del sitio de mySQL he podido obtener detalles o respustas que me guien a resolver.
Tu eres lo mas cercano a una respuesta orientadora y te agradezco mucho y te tomes la molestia de pensar en el problema y de exponer lo que piensas.
Realmente estoy por tirar la toalla, son 10 Mill de registros, y estar modificando estructura, etc etc es muy tardado, y pues quiza probare hacer pruebas en paralelo montando la bd en postgresql, aunque antes de decidirme por mysql, lei que en procesos de este tipo, pg es mas debil que mysql, asi que a intenatr alternativas

Cita:
Iniciado por pragone Ver Mensaje
Hola xcars,

He estado pensando un poco en el problema... y hay algo que se me ocurre (aunque no lo tengo claro). Según he visto, cuando la búsqueda en el Full-text search la haces en Boolean Mode, me parece que la relevancia se calcula de una forma diferente... no tengo muy claro cómo, pero tienes razón en que un fulltext es lo más cercano a resolver el problema, pero no termina de servir... así que lo investigaría

Otra idea es que en lugar de ordenar por el Match de todas las columnas, ordenes por otro Match que sólo incluya el nombre... o que ponderes ese con algún peso sobre el Match general.

Siento no ser de más ayuda :(
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
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:45.