02-10-2011

Creando sistema de sugerencias de búsqueda

Tras haber terminado el proyecto de buscador interno mediante índice invertido comencé a logear datos de palabras clave en la base de datos. Me di cuenta que un gran número de consultas de búsqueda estaban mal escritas por parte del usuario. A veces eran por fallos al teclear, pero otras también eran por faltas ortográficas. Mi intención era facilitar al usuario un camino alternativo en caso de que su búsqueda diera 0 resultados. Por supuesto que al dar 0 resultados les devolvía cierto contenido que le podría interesar pero además quería darle opciones de palabras clave de búsqueda que sí devolvieran contenidos.

Para que el sistema gastase pocos recursos, lo ideal que se me ocurrió es generar estas sugeréncias de búsqueda cada cierto tiempo, normalmente lo hacía a diario mediante un cron. De este modo en la base de datos quedaban guardadas las sugerencias para cada palabra clave y el usuario las vería como opciones disponibles.

Los problemas

La base de datos albergaba demasiadas palabras clave, esto daría como resultado un coste de generación muy elevado. La solución fue logear también desde PHP el número de veces que se consultaba cada palabra clave, un contador. De este modo, el programa que ejecutaría en el cron filtraría todas las palabras clave que apenas busca la gente y reduciría su rendimiento en un 90%.

Una vez filtrados los datos de entrada, hice uso del popular algoritmo de distancia levenshtein. Para cada palabra clave que no diera resultados, se buscaría mediante levenstein las palabras claves más semejantes a esta, asegurándome que dieran contenido al usuario. De este modo se le daba al usuario la opción de clicar a ese enlace como ya hacen muchos buscadores de páginas web tipo Google. Lo cierto es que mejoró las estadísticas de uso de la web.

Finalmente lo único que quedaba era guardar en el lugar correcto de la base de datos toda esta información y cargarla desde la página. Este fue el resultado para la palabra clave poquemon que algunos escribían y debería ser pokemon y para la palabra clave cosinar con sara.

Ejemplo sugerencias de búsqueda macrojuegos.com Sugerencias de búsqueda

Otra sugerencias de búsqueda

Un poco de código. Objetos y métodos que se crearon para este proyecto Code example

Disclaimer: Este proyecto es privado. Significa que no soy el dueño del código y por tanto no puedo garantizar el visionado libre del mismo, solo algunas imágenes a modo demostración con permiso del dueño. Sin embargo, si fuera necesario en un momento dado (como en una entrevista laboral) podría dar acceso a un repositorio privado para poderlo visualizar.
  • php
  • mysql
  • search-engine
  • web-development
  • private-project
  • company:panaworld