Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/09/2012, 09:29
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Como armar un buen buscador MYSQL

Hola skyspablo:

En realidad no existe un "mejor" método de búsqueda... todos tienen puntos a favor y en contra, aunque definitivamente opino que utilizar búsquedas de texto completo en una de las mejores...

Hay varios aspectos que puedes considerar para mejorar las búsquedas, como por ejemplo el detalle de la longitud de las palabras a buscar... dale un vistazo a esto:

http://dev.mysql.com/doc/refman/5.0/...ne-tuning.html

definitivamente no recomiendo el uso de condiciones tipo

Código:
campo LIKE '%algo%'
ya que estas tienen un terrible desempeño y el performance de tu servidor se puede ver comprometido...

Para la parte de "Quizás quiso decir palabra" en realidad tendrías que hacer un catálogo de sinónimos, considerando las posibles faltas de ortografía...

obvio -> obio, ovio, hobio, hobvio, hovio...........

Esto puede ser tan simple o tan complicado como quieras, también podrías implementar la función SOUNDEX, para tratar de encontrar resultados "parecidos" aunque esto tampoco implica que tengas el resultado esperado:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> SOUNDEX('obvio'),
  3.     -> SOUNDEX('obio'),
  4.     -> SOUNDEX('ovio');
  5. +------------------+-----------------+-----------------+
  6. | SOUNDEX('obvio') | SOUNDEX('obio') | SOUNDEX('ovio') |
  7. +------------------+-----------------+-----------------+
  8. | O100             | O100            | O100            |
  9. +------------------+-----------------+-----------------+
  10. 1 row in set (0.00 sec)

También tendrías que considerar por ejemplo el uso de la letra H... ya que esta puede alterar tu resultado:

Código:
mysql> SELECT
    -> SOUNDEX('hobvio'),
    -> SOUNDEX('hovio'),
    -> SOUNDEX('hobio');
+-------------------+------------------+------------------+
| SOUNDEX('hobvio') | SOUNDEX('hovio') | SOUNDEX('hobio') |
+-------------------+------------------+------------------+
| H100              | H100             | H100             |
+-------------------+------------------+------------------+
1 row in set (0.00 sec)
Te repito esto lo puedes hacer tan simple o tan complicado como quieras, puedes por ejemplo manejar una opción de autocompletar a partir de las búsquedas más comunes, pero hagas lo que hagas, siempre te encontrarás con usuarios que le den al traste con todo tu trabajo. Si esta búsqueda es primordial para tu lógica de negocio, entonces si te conviene invertirle tiempo y esfuerzo en afinar el buscador, pero si resulta una tarea secundaria, olvídate de ella y no que quiebres tanto la cabeza.

Saludos
Leo.