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

Aviso legal: Este proyecto es confidencial. Por lo tanto, no puedo proporcionar acceso al código fuente completo, pero puedo compartir imágenes o pequeños fragmentos de código con fines de demostración, con el permiso del propietario. Sin embargo, si es necesario para una entrevista, podría ser posible otorgar acceso al repositorio privado donde se encuentra alojado este código o una copia del mismo.
  • php
  • mysql
  • search-engine
  • web-development
  • private-project
  • company:panaworld

Vías de Contacto

¿Quieres comentarme algo? Soy de Barcelona. A continuación, te dejo varias opciones para contactar conmigo.

Estado: Estoy trabajando 100% Remoto como Full Stack Developer, pero estoy abierto a oportunidades que me ayuden a hacer crecer mi carrera.

contacto@danieldev.es

Esta PWA ha sido desarrollada por Daniel Domínguez Rubio usando tecnologías como: React, Gatsbyjs, GraphQL, Nodejs, AWS S3 y Cloudfront.

v1.11.0