Aquí examinamos una técnica para mejorar la usabilidad en aplicaciones complejas mediante la introducción de una búsqueda más inteligente y las funcionalidades de «objetos recientes». A medida que la usabilidad se convierte cada vez más en una característica crucial de las aplicaciones, ayudar a los usuarios con la búsqueda de texto completo y las listas de objetos recientes puede resultar insuficiente. Es posible que necesites ir más allá de estas funciones, teniendo una forma de mantener el seguimiento de los objetos «más utilizados», lo cual ayudará a:
– adivinar lo que estás buscando
– encontrar lo que estás buscando
El problema
Veamos un ejemplo.
En estas semanas estás trabajando en los elementos A, B y C de tu aplicación web favorita. El viernes, en realidad, trabajaste brevemente en X, Y y Z antes de ir a casa, ya que llevabas bastante tiempo con estos en la parte inferior de tu lista de tareas pendientes. Ahora, vuelves a trabajar el lunes, ¿y qué tienes en tu lista de «objetos recientes»? Bueno, X, Y, Z. Inútil. Pero tienes búsqueda de texto completo. Buscas el nombre de A, que en realidad comparten cientos de otros objetos, y es posible que haya muchas más ocurrencias que en A, incluso si nadie los ha estado usando desde hace bastante tiempo, por lo que llenan los resultados por encima de tu A. Inútil. No hay una forma fácil de volver a A: algo aquí no está funcionando.
Este es un problema de usabilidad; para hacer que tu aplicación sea más útil, de alguna manera debes mantener el seguimiento de lo que se usa con mayor frecuencia por los usuarios. ¿Cómo hacer eso? Una respuesta completa no es trivial: como a menudo sucede en los problemas de usabilidad, lo que parece simple desde el punto de vista del usuario, en realidad es complejo de resolver y renderizar. Al final, toda la complejidad debe estar oculta, pero la solución no es trivial.

Lo que es relevante para ti no es solo lo que visitaste ocasionalmente, sino, por ejemplo, proyectos o documentos a los que has vuelto una y otra vez recientemente: necesitas mantener en foco una ventana de atención. Míralo de esta manera: quieres los proyectos o documentos a los que estás enlazando con frecuencia. Necesitas una especie de página de clasificación personal.
Registro de visitas
Bueno, el camino a seguir es registrar lo que estás haciendo; tienes que registrarlo de alguna manera como una tabla paralela, probablemente desnormalizada, de «visitas», manteniéndola muy simple, ya que probablemente obtendrás rápidamente muchas registros allí.
|
|
En la imagen ves un ejemplo de «visita», cuando un usuario mira y/o trabaja en algo. Ten en cuenta que, como recopilarás muchos datos, necesitarás filtrar en función también de tu modelo de seguridad: por eso tenemos el campo «areaId» allí. |
Sin embargo, sin importar cómo decidas recopilar las visitas, tendrás que enfrentar el problema de cómo ponderarlas, es decir, tener definida una función de clasificación de visitas sobre usuarios, objetos y tiempo.
En nuestra implementación, creamos una función que para cada usuario de Teamwork y cada entidad (ya sea tarea, problema, entrada de diario, documento, acción de worklog) calcula la clasificación de visitas del usuario para la entidad; si la entidad es relevante para el usuario, la clasificación de visitas será alta. La clasificación se vuelve alta al «visitar» es decir, visitar una entidad.
Como dijimos antes, se asume que el interés se desvanece con el tiempo, de lo contrario terminarías teniendo demasiadas entidades con alta clasificación: por lo tanto, tienes que definir una especie de ventana de atención, con una degradación de la relevancia.
![]() |
![]() |
Necesitas una forma de calcular la degradación de la relevancia; definimos la degradación con el lado derecho de una curva gaussiana con las constantes en el código.
La clasificación de visitas se puede refinar en la noción de clasificación de grupo, si tu aplicación tiene una noción de grupo de trabajo, de modo que puedas definir la actividad del grupo. Otro beneficio de la clasificación de visitas es que puedes monitorear eficientemente el uso de tu aplicación, o «actividad», y podría llevar a la introducción de insignias et cetera.
Implementación de ejemplo
Una implementación de ejemplo está en Teamwork: como incluye gestión de proyectos, procesos de negocio y groupware, hay muchos objetos alrededor. La clasificación de visitas ha demostrado ser útil de varias maneras para mejorar la usabilidad, sin empobrecer el modelo.
«Lo que más visitaste» es un portlet que puedes tener en tus paneles de control, y también ves los resultados de búsqueda clasificados:
|
|
|
|
De esta manera, siempre debes tener «a mano» en lo que realmente estás trabajando: debes poder acceder a tus objetos más relevantes con un clic.
Referencias
El artículo de Page Rank de Google: The Anatomy of a Large-Scale Hypertextual Web Search Engine
Una discusión sobre insignias: http://stackoverflow.com/questions/135647/how-do-badges-work-in-stackoverflow
Una introducción a la búsqueda de texto completo: http://www.javaworld.com/javaworld/jw-09-2006/jw-0925-lucene.html
Búsqueda de texto completo en Hibernate: http://www.hibernate.org/410.html
Nuestra contribución a la búsqueda de texto completo en Hibernate: http://www.hibernate.org/432.html
Mira la clasificación de visitas en acción en la demo o instalando la aplicación web.
Mira un infográfico interesante aquí Anatomía de un motor de búsqueda de First Site Guide







