Desarrollo de Sistema de Búsqueda transversal: +200 sitios a un clic de distancia

Felipe Lavín
5 min readDec 11, 2015

--

Uno de los desafíos más complejos al desarrollar un ecosistema de sitios independientes es el de poder resaltar un sentido de identidad transversal a todos ellos.

En este sentido, la posibilidad de poder integrar los resultados de más de 200 sitios en un único sistema de búsqueda representó tanto una necesidad técnica como también un requisito para presentar una personalidad unificada a los usuarios del ecosistema.

La realidad de una organización compleja

La Universidad del Desarrollo cuenta con más de 12 facultades con distintos modos de organización interna y diversas formas de administración de sus propiedades digitales, por lo que una de las condiciones más acuciantes en nuestro trabajo es la de generar herramientas que respeten, se amolden, y potencien la forma de organización de cada unidad y de la Universidad como un todo.

Una de las bases para esto ha sido la generación de un ecosistema de sitios basados en WordPress con administraciones independientes, lo que permite una gestión de contenidos más ágil y autosuficiente desde cada unidad.

Gracias a esto, estos diversos equipos han llegado a producir decenas de miles de contenidos de distintos tipos: información sobre carreras, beneficios para estudiantes, noticias, actividades y perfiles de académicos y funcionarios de la Universidad, que sin embargo quedaban confinados a la búsqueda en cada uno de los sitios.

Por lo tanto, la realización de este proyecto surgió de la necesidad de lograr los siguientes objetivos:

  • Generar un almacén unificado con la información de todos los sitios, actualizada en tiempo real, sobre un sistema de base de datos potente, flexible y escalable.
  • Permitir consultas de información de forma transversal a todos los sitios, considerando diversos parámetros de búsqueda y factores para la ordenación de los resultados (relevancia, fecha, etc).
  • Evitar la duplicación de contenidos y trabajo al permitir la reutilización de la información ya ingresada en otro sitio.

El reto de un desafío técnico

En nuestras primeras iteraciones, evaluamos la posibilidad de aprovechar la experiencia con tecnologías ya conocidas y simplemente modelar y construir una base de datos MySQL que almacenara una copia de toda la información de cada sitio.

Desechamos rápidamente esta idea debido a que no resolvía adecuadamente la búsqueda por relevancia, ni el problema más fundamental que significaba poder buscar en contenidos con propiedades bien diferenciadas.

Este punto nos llevó a explorar otras posibilidades bajo la premisa de que los contenidos debían ser almacenados como documentos que podían tener distintos esquemas de datos pero debiendo convivir en un único índice.

Luego de estudiar y analizar varias alternativas, nos topamos con una tecnología relativamente nueva pero que resultaba ampliamente prometedora y ya en ese entonces (fines del 2012) contaba con el apoyo de grandes nombres de la industria: Elasticsearch.

Descubriendo la herramienta adecuada …

Elasticsearch rápidamente se convirtió en la mejor alternativa para poder enfrentar nuestros requerimientos:

  • Como servidor de búsquedas considera una excelente capacidad de búsqueda en texto completo y orden por relevancia.
  • Al tratarse de un proyecto de software libre (código abierto) no debíamos incurrir en costosas licencias de uso. Al mismo tiempo, contaba con suficiente respaldo de parte de empresas reconocidas (WordPress.com, GitHub, Foursquare, Path…).
  • Los registros son almacenados como documentos JSON sin esquema (similar a una base de datos NoSQL) pero con un mapeo de datos que permite consultas estructuradas.
  • Cuenta con una arquitectura distribuída diseñada para entregar una alta escalabilidad y performance.
  • Permite una alimentación continua con un flujo constante de datos, que se disponibilizan en tiempo real para el índice de búsquedas.

Finalmente, al contar con una API REST para la indexación, búsqueda y gestión nos aseguraba la posibilidad de desarrollar integraciones con cualquier tecnología.

… para generar una solución a la medida …

Por supuesto, contar con la herramienta adecuada sólo representa la mitad del trayecto.

Una vez que ya decidimos la utilización de Elasticsearch, nos correspondía la tarea de poder aprovechar todos sus encantos para abordar apropiadamente nuestros objetivos iniciales.

Para esto, el primer paso fue identificar los tipos de documentos que necesitábamos indexar, para luego definir sus propiedades de modo de permitir búsquedas potentes pero simples.

Basándonos en las estructuras de datos propuestas por la iniciativa de microformatos, modelamos el mapeo de los documentos distinguendo propiedades específicas a cada tipo de objeto y propiedades comunes (autor, fecha de publicación y actualización, taxonomías). Por ejemplo, algunos de los datos considerados para el perfil de una persona:

"n": {
"honorific-prefix": "Mag.",
"given-name": "Daniel Ignacio",
"family-name": "Sandoval López"
},
"fn": "Daniel Sandoval López",
"url": "http://academia.edu/daniel-sandoval-lopez",
"tel": {
"job": "(+56) 2599873",
"mobile": ""
},
"role": "Director de Carrera Publicidad Santiago",
"photo": "9867a74754d752c364d8a1a3b4e39ab40af9b40d",
"email": "dsandoval@udd.cl",
"summary": "Lorem ipsum dolor sit amet, consectetur adipiscing elit...",
"title": "Magíster en Márketing, UNAB, Madrid, España"
---
{...}

Gracias a nuestra amplia experiencia desarrollando sobre WordPress, pudimos implementar un módulo de integración que nos permite enviar los nuevos contenidos de cualquier sitio en el mismo instante en que son creados, y mantener la información actualizada en tiempo real.

Adicionalmente, desarrollamos procesos de indexación masiva que nos permitieron la construcción inicial del índice pero que además nos dan la posibilidad de una rápida recuperación en caso de emergencia y de flexibilidad en caso de necesitar modificar el mapeo de datos para alguno de los tipos de documentos.

… como parte de un ecosistema abierto.

Puesto que distintas unidades de la Universidad han optado por trabajar con otros proveedores, complementamos la documentación de Elasticsearch con diversas guías de integración que permiten una mejor convivencia, como:

  • Introducción intensiva a Elasticsearch.
  • Detalles del contexto específico de la utilización de Elasticsearch dentro de la Universidad.
  • Indicaciones de buenas prácticas para el desarrollo y la puesta en producción de integraciones con Elasticsearch.
  • Especificaciones de los tipos de documentos definidos en el buscador.
  • Sugerencias de librerías para realizar una integración.
  • Definición de procesos mínimos de integración.

Finalmente, integramos también procesos automáticos de análisis, registro y corrección para actividades no asociadas a eventos de publicación o edición en WordPress, tales como cambios de URLs, eliminación de sitios, etc.

Creemos firmemente en que “no existen soluciones tecnológicas”, sino capacidades de solucionar problemas (que no son tecnológicos) utilizando tecnología.

Esta experiencia con Elasticsearch abre un sinfín de posibilidades que sólo pueden significar mejores herramientas para los editores de los sitios y una mejor experiencia para sus usuarios. Por ejemplo, ha posibilitado procesos de auditoría de contenidos transversales a todas las propiedades de la Universidad; mientras la centralización en la gestión de información crítica permite ofrecer contenidos sin ambiguedades.

Uno de los productos de la integración con Elasticsearch es pulsoUDD, un agregador de noticias y eventos de todos los sitios de la Universidad, actualizado en tiempo real.

A partir de esta base, se hace más fácil soñar y pensar en las soluciones innovadoras que se requieren para mejorar constantemente.

--

--

Felipe Lavín

Socio+Director en https://bloom-ux.com — Hago cosas con PHP/MySQL/Javascript; ❤ WordPress, User Experience, Linux y FOSS. A veces escribo en www.yukei.net