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

MATCH... AS Score : No encuentra nada para ciertas busquedas

Estas en el tema de MATCH... AS Score : No encuentra nada para ciertas busquedas en el foro de Mysql en Foros del Web. Tengo un fulltext search con 5 columnas y parecia funcionar bien.. pero luego me di cuenta que para algunas busquedas no devuelve ningun resultado, y ...
  #1 (permalink)  
Antiguo 04/10/2009, 18:36
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 14 años, 11 meses
Puntos: 0
MATCH... AS Score : No encuentra nada para ciertas busquedas

Tengo un fulltext search con 5 columnas y parecia funcionar bien.. pero luego me di cuenta que para algunas busquedas no devuelve ningun resultado, y no puede ser.

Esta es la busqueda que no anda:




Y acá hice la misma busqueda pero con LIKE, para que vean que sí deberia devolver resultados:




Qué puede ser? Primero pense que tendrian tan bajo score que ni aparecerian, pero por lo que veo acá tienen Score 0.

Esta es la imagen que quiero encontrar por medio de la busqueda "think different", se las dejo por si quieren probar que poniendo otras palabras sí la encuentra http://www.imageflash.com.ar/wallpap...ellaneous/6109 (es un chiste por el eslogan de Apple, no es propaganda nazi). La busqueda se realiza desde http://www.imageflash.com.ar/

Saludos

pd: los LEFT JOIN no eran necesarios para esta búsqueda reducida, me olvide de sacarlos pero bueno, no les presten atencion

Última edición por horape; 04/10/2009 a las 18:50
  #2 (permalink)  
Antiguo 04/10/2009, 20:03
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: MATCH... AS Score : No encuentra nada para ciertas busquedas

En alguna ocasión leyendo un poco de este tipo de busquedas, me encontré con una frase interesante.
Cuando las palabras a buscar superan el 50 % de la totalidad de los campos, se intuye que es información poco relevante y no genera ningún resultado.

En un ejemplo te pongo el fenomeno.

Código mysql:
Ver original
  1. mysql> create table ft(nombre text) engine=myisam;
  2. Query OK, 0 rows affected (0.09 sec)
  3.  
  4. mysql> alter table ft add fulltext(nombre);
  5. Query OK, 0 rows affected (0.08 sec)
  6. Records: 0  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> insert into ft values('daniel sebastian');
  9. uery OK, 1 row affected (0.00 sec)
  10.  
  11. mysql> insert into ft values('daniel orozco');
  12. Query OK, 1 row affected (0.00 sec)
  13.  
  14. mysql> insert into ft values('daniel felipe');
  15. Query OK, 1 row affected (0.00 sec)
  16.  
  17. mysql> insert into ft values('daniel fernan');
  18. Query OK, 1 row affected (0.00 sec)
  19.  
  20. mysql> insert into ft values('daniel santi');
  21. Query OK, 1 row affected (0.00 sec)
  22.  
  23. mysql> select *from ft;
  24. +------------------+
  25. | nombre           |
  26. +------------------+
  27. | daniel sebastian |
  28. | daniel orozco    |
  29. | daniel felipe    |
  30. | daniel fernan    |
  31. | daniel santi     |
  32. +------------------+
  33. 5 rows in set (0.00 sec)
  34.  
  35. mysql> select *from ft where match(nombre) against('daniel');
  36. Empty set (0.00 sec)

La palabra daniel está en los 5 registros y lo toma como información poco relevante. Sería como si google le diera prioridad a las palabras de, los, la etc.

Ahora en este mismo ejemplo hacemos:
Código mysql:
Ver original
  1. mysql> delete from ft;
  2. Query OK, 5 rows affected (0.00 sec)
  3.  
  4. mysql> insert into ft values('daniel santi');
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> insert into ft values('daniel fernan');
  8. Query OK, 1 row affected (0.00 sec)
  9.  
  10. mysql> insert into ft values('juan felipe');
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> insert into ft values('juan fernan');
  14. Query OK, 1 row affected (0.00 sec)
  15.  
  16. mysql> insert into ft values('juan jose');
  17. Query OK, 1 row affected (0.00 sec)
  18.  
  19. mysql> select *from ft;
  20. +---------------+
  21. | nombre        |
  22. +---------------+
  23. | daniel santi  |
  24. | daniel fernan |
  25. | juan felipe   |
  26. | juan fernan   |
  27. | juan jose     |
  28. +---------------+
  29. 5 rows in set (0.00 sec)
  30.  
  31. mysql> select *from ft where match(nombre) against('daniel');
  32. +---------------+
  33. | nombre        |
  34. +---------------+
  35. | daniel santi  |
  36. | daniel fernan |
  37. +---------------+
  38. 2 rows in set (0.00 sec)
  39.  
  40. mysql>

Esto es un criterio que leí y compruebo para poca cantidad de datos pero sin una fundamentación tecnica sacada directamente del manual de mysql.

Ese es exactamente tu problema. Y creo que esa es la explicación del fenomeno.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 04/10/2009, 20:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: MATCH... AS Score : No encuentra nada para ciertas busquedas

si lo habia pensado, pero me parecia raro porque la tabla wallpapers tiene mas de 14000 filas y no hay tantas que digan "think" o "different".. salvo que no esté tomando en cuenta las que tengan estos campos vacios, pero aun asi me parece raro

hay forma de indicarle que no haga caso a ese criterio del 50% ? Al menos para probar si es ese el problema
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 22:20.