Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/10/2009, 20:03
Avatar de huesos52
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