Introducción a Apisearch

Durante las últimas semanas he intentado hablar con gente sobre buscadores, sobre cómo solucionan todo el sistema de indexado en sus proyectos, formas dinámicas de guardar los registros, sobre performance, machine learning… y si una cosa puedo deciros es que, sencillamente, de las pocas formas que hoy en día se soluciona el “problema” es, o instalando un Elasticsearch dentro de la infrastructura del proyecto, o simplemente utilizando un servicio de terceros, como podría ser Algolia.

En ambos casos, suelo preguntar si la persona o el equipo en cuestión está contenta, y posteriormente, pregunto el porqué de la decisión tomada. Aquí algunos detalles sobre las respuestas más relevantes.

  • Elasticsearch es una tecnología que funciona estupendamente, pero es un horror cambiar entre ciertas versiones. Al final, terminas teniendo versiones muy antiguas en el servidor
  • Trabajar con Elasticsearch es caro. El precio no se calcula a nivel de infrastructura, cuyo precio cambia según el nivel de clúster que necesitas, pero suele ser mínimo. El precio se calcula con el tiempo que precisa utilizar una tecnología como esta: entender la mejor forma de utilitzarlo, con su curva de aprendizaje en su formato propio. El precio de diseñar, crear y mantener las APIs que van a consumir Elasticsearch por detrás para que el cliente final pueda utilizar siempre un formato más product friendly. La necesidad de hacerlo todo custom dado que no se sigue, prácticamente, ningún estándar. Esto es caro.
  • Prefiero externalizar y quitarme todo este engorro de encima. Hay servicios como Algolia (por poner un ejemplo) que me dan lo que necesito, con un precio muy competitivo al principio, y me permite centrarme en mi negocio.
  • No hay un servicio perfecto para esto. Si utilizo Elasticsearch, me lo como yo entero. Si externalizo el servicio, creo una dependencia muy importante en mi proyecto, y siendo un poco cortoplacista es una gran decisión. Siendo más bien largoplacista, será un problema. Seguro.
  • En mi proyecto, siempre intento externalizar los servicios. Al principio todos suelen dar precios muy bajos o gratuitos, y al cabo del tiempo, si mi negocio va bien, no debería ser un problema.

Aquí unos puntos que me han hecho reflexionar. Y para ser sincero, son exactamente los puntos que tenía en mente yo, hace un par de años, cuando me dije que el proyecto que tenía delante mío, sería el último buscador que haría en mi vida (de momento, os prometo que sigue siendo así…)

Si bien es verdad que una tecnología como Elasticsearch (por poner un ejemplo) te mantiene siempre la capacidad de hacer muy custom todo lo que uno necesita, también es verdad que el coste que eso conlleva suele ser muy elevado. Uno necesita tener ciertos conocimientos de la tecnología, cual sea que sea esta, para poder hacer un buen uso, y más si se trata de una tecnología tan específica como esta.

También es verdad que en casos como los proyectos pequeños, suele ser mucho mejor utilizar servicios externos, dado que el impacto es mucho menor, es mucho más asequible a cualquier tipo de perfil (suelen ser empresas muy enfocadas a perfil más gestor y menos tecnológico) y se suelen tener resultados bastante rápidos sin costes ni tiempo de infrastructura.

Todo esto está muy bien. Pero para ser honestos, es importante siempre poner los contras en toda reflexión. Y en este caso los hay. Y bastantes. En estas líneas os quiero mostrar los que yo creo que son los contras en ambas estrategias, y como poner remedio a (casi) todas ellas de una forma MUY simple.

  • Primero de todo. Piensa que tu proyecto ahora puede ser pequeño, pero si tú trabajas tanto en ella es para que el día de mañana eso cambie un poco. Y sí, las grandes empresas juegan a este juego. Y lo juegan muy bien. Ahora te ayudan muchísimo a que empiecen con ellos, a coste 0 y con todas las facilidades posibles. Pero acuérdate. Utilizas SU especificación, una especificación NO estandarizada de ninguna forma, y con el coste que supone cambiar un sinfín de proyectos en tu infrastructura para cambiarla en caso de querer cambiar de proveedor.
  • Utilizar proyectos como Elasticsearch directamente es muy útil si tienes unas necesidades muy diversas. Este no suele ser el caso, pues la mayoría de las veces uno requiere el poder buscar sobre unos campos y pesos específicos, poder ordenar cómodamente y gestionar mínimamente la performance del servicio (o, visto lo visto, ni esto…). En este caso, siempre se puede utilizar una capa intermedia, que al final, es lo que hace Algolia (utiliza algo equivalente a Elasticsearch).
  • Utilizar servicios como Algolia tienen el hándicap de que ellos gestionan y guardan tus datos, y por muchas capas de seguridad que pongas de por medio, eso no va a cambiar. Y todos sabemos que, a la larga, y según los datos que puedas guardar en su índice, puede terminar siendo un problema.
  • Trabajar con servicios externos de pago te aleja mucho de la filosofía que nos ha llevado hasta aquí, la filosofía open source. Y no digo que sea malo, ni mucho menos. Es más, es interesante que estas empresas generen investigación y puestos de trabajo, y eso es siempre magnífico. Hablando desde la perspectiva de la empresa, sin embargo, suele tener su precio al final, un precio que suele pagarse con proyectos de migración cuando el servicio se queda corto. Todos lo hemos vivido. Y todos sabemos lo carísimos que suelen ser estos procesos.
Image for post
Image for post

Una de las personas con las que hablé sobre el tema (en realidad, casi todas), me confesó que no tenía ni idea de qué era Apisearch, y eso me hizo pensar que en todo proyecto open source, es importante tanto la parte técnica como la parte de comunicación. Y es que en Apisearch estamos perfilando ya su primera versión estable. Pero necesitamos muchos más casos de éxito, más gente utilizándolo y más buscadores sirviendo buenísimos resultados gracias a ello. Necesitamos que muchísima más gente nos conozca.

Os cuento con poquillos puntos, a ver si os gusta la idea.

  • Apisearch es un servicio open source, cuyo objetivo es simple y llanamente el de ofrecer a tu empresa una API simple pero completa para poder guardar entidades, buscar y filtrar sobre ellas.
  • Apisearch está creado en PHP7 y Symfony, y utiliza una arquitectura CQRS como característica principal, pudiendo trabajar con acciones asíncronas cuando se precisa.
  • Apisearch tiene diseñado un sistema muy completo de plugins, cuyo objetivo es poder modificar el comportamiento por defecto del buscador, así como añadir tantas funcionalidades como la comunidad requiera.
  • Apisearch utiliza Elasticsearch 6.* como sistema de búsqueda, siendo este otro plugin más. Eso hace que cambiar de versión de Elasticsearch sea trivial y instantáneo. Y es cuestión de tiempo que sea compatible con Elasticsearch 7.
  • Apisearch dispone de algunos clientes (PHP, Typescript), así como algunas herramientas interesantes para hacer buscadores completos y funcionales con pocas líneas de configuración.
  • Apisearch no requiere de Apache ni de Nginx, pues tiene su servidor propio en PHP7. Las requests ser sirven en pocos milisegundos, dependiendo de la query y la infrastructura. El servidor está basado en ReactPHP y permite poder trabajar con el Kernel de Symfony permanentemente en memoria con un downtime inimaginablemente nulo. Performance for the win.
  • Apisearch tiene un contrato muy definido, preparado para ser comprendido en cualquier departamento de tu empresa. Eso hace que, y con una buena gestión de Tokens, una de las características del proyecto, puedas dar servicio directamente a tus clientes, plataformas y otros servicios, sin tener que invertir un solo segundo en proyectos intermedios.

Hay muchísimo más, pero mi objetivo en este post es alzar un poco la voz, y decir en alto que Apisearch existe. Que actualmente está sirviendo millones de resultados en algunas empresas medianas, y que, en todas ellas, ha conseguido eliminar mucho código redundante, servicios intermedios y poder ofrecer, de una forma transversal, un servicio de búsqueda asequible para todos los departamentos.

Y todo esto, open source, completamente gratis, y con una comunidad, por ahora pequeña, pero con muchas ganas de trabajar muchísimo.

Si queréis saber más, os dejo aqui algunos links :) Como siempre, muchísimas gracias y a seguir trabajando.

  • Visítanos en Github y regálanos una estrellita en nuestro server si ha gustado :)
  • Visita nuestra documentación. Estamos constantemente mejorándola y incorporando nuevas entradas. Si estás interesado en alguna parte, comenta este post, y nos pondremos las pilas.
  • Puedes instalar en minutos una demo en tu local. En pocos minutetes, tendrás funcionando perfectamente un stack “Apisearch + Elasticsearch + Logstash + Kibana + Redis”, con un buscador de cómics de Marvel.
  • Síguenos en Twitter y recibe nuestros updates. No molestamos mucho, solo lo necesario. También nos puedes seguir en este blog :)
  • Comenta lo que quieras. Estamos para ayudar y resolver un problema muy específico. Si estás interesado en probar el proyecto, en testearlo en tu empresa con un POV, o si quieres trabajar en alguno de nuestros clientes o uno nuevo, si quieres mandarnos feedback o simplemente si quieres saludarnos, aquí estamos.
  • También puedes participar en el canal de Slack. Para esto, necesitarás una invitación. Puedes conseguirla en 10 segundos en este enlace.

Creator of Apisearch, Data lead at Zinio

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store