A la hora de almacenar información, documentos y datos, siempre debemos tener en mente un modo de realizar una búsqueda rápida entre todo eso, porque si la cantidad de información guardada es muy grande y luego queremos buscar rápidamente algo específico, vamos a estar en problemas. La buena noticia es que existe un poderoso software de búsqueda en documentos que nos salvará la vida: ElasticSearch.
Contenido
¿Qué es ElasticSearch?
ElasticSearch es un software que actúa como motor de búsqueda y análisis. Se trata de un programa que es abierto y gratuito, sirviendo para datos de todo tipo, por ejemplo de texto, números, con estructuras o sin ellas, entre muchos otros. Su lanzamiento inicial fue en el año 2010.
ElasticSearch se ha convertido en una de las mejores herramientas dentro de su nicho gracias a su uso extendido, su distribución, la velocidad que brinda al realizar búsquedas y la sencilla escalabilidad que posee.
ElasticSearch es el componente principal de un stack de software que es conocido como Elastic Stack o simplemente ELK Stack. Las siglas ELK proceden de los tres programas principales que lo componen, que además del ya mencionado ElasticSearch también incluye a Logstash y a Kibana.
Estos tres programas gratuitos brindan todo lo necesario para obtener una suite de almacenamiento, análisis y visualización de datos de primer nivel.
ElasticSearch brinda una escalabilidad y velocidad de búsqueda pocas veces vista, debido a esto podemos utilizar esta herramienta para guardar toda clase de contenido y realizar búsquedas complejas en aplicaciones, en sitios web, en servidores físicos como servidores en la nube, en documentos empresariales, en logs y registros, también se puede utilizar para monitorear datos en conjunto con Logstash y Kibana, así como en tareas de análitica empresarial y de seguridad.
¿Cómo funciona un Servidor Elasticsearch?
El proceso de indexación de Elasticsearch comienza cuando el software recibe datos, los cuales pueden proceder desde prácticamente cualquier fuente. Cuando los datos son recibidos, da comienzo un proceso de clasificación y enriquecimiento, lo cual resultará el en indexado final. Una vez el índice de datos está listo, ya podemos comenzar a realizar búsquedas.
Con los datos ya ingresados es posible utilizar el conjunto de Elastic Stack para hacer muchos más que simplemente buscar datos y ya, porque Logstash y Kibana permiten llevar las capacidades de ElasticSearch a otro nivel al trabajar en conjunto como parte del Elastic Stack. Veamos rápidamente en qué consiste esta suite de herramientas.
Logstash es un software utilizado a la hora de agregar datos y procesarlos para posteriormente pasarlos a ElasticSearch. Logstash funciona como un canal que procesa datos dentro de nuestro servidor, siendo capaz de obtener estos datos de distintas fuentes. A continuación los datos son enriquecidos y pasados a ElasticSearch para ser indexados.
Por otro lado tenemos a Kibana, el tercer componente del Elastic Stack. Se trata de un software para gestionar y visualizar datos, pudiendo generar mapas, gráficos y mucho más. Gracias a su integración con Canvas podemos utilizarlo para crear infografías, y si lo usamos en conjunto con Elastic Maps podremos crear mapas de todo tipo.
Ventajas de ElasticSearch
Como ya hemos comentado, ElasticSearch es un software estupendo, y nos brinda un montón de grandes ventajas frente a otros software de naturaleza similar, veamos cuáles son dichas ventajas a continuación.
Muchas opciones de búsqueda
Así es, con un servidor ElasticSearch tenemos muchos tipos distintos de opciones de búsqueda que nos permitirán sacarle todo el jugo a esta herramienta. Entre los tipos de búsquedas disponibles tenemos palabras enteras, palabras cortadas, búsquedas mediante stemming personalizado, búsquedas por facetas, de texto completos, búsquedas instantáneas y de autocompletar.
Incluso podremos encontrar lo que estemos buscando si hay errores ortográficos de por medio. Las búsquedas instantáneas y de autocompletado nos permiten comenzar a buscar desde el momento que comenzamos a escribir. El autocompletado nos puede brindar sugerencias simples o cargar etiquetas existentes, incluso puede predecir lo que queremos buscar a medida que escribimos basándose en el historial de búsquedas.
Está orientado a documentos
ElasticSearch es capaz de almacenar toneladas de información compleja en forma de documento JSON estructurados, indexando por defecto todos los campos que encuentre, lo cual permitirá realizar búsquedas con resultados rápidos y precisos.
Velocidad
Y hablando de la velocidad de las búsquedas, al contar con un servidor ElasticSearch es capaz de ejecutar peticiones de búsquedas complejas realmente rápido. Puede almacenar en caché las requests complejas para filtrar resultados rápidamente, de forma que la mayoría de búsquedas solo necesitan ser ejecutadas una vez antes de almacenarse en caché.
Para las búsquedas que contengan filtros cacheados, primero se verificará en el caché existente, acelerando mucho la obtención de resultados.
Escalabilidad
Los desarrolladores suelen favorecer mucho a ElasticSearch debido a su potente escalabilidad. Es muy fácil escalar ElasticSearch horizontalmente, brindando un mejor manejo de recursos y balanceando la carga de Elastic entre varios nodos dentro de un mismo entorno de servidores en clúster.
Registro de Datos
Si lo tenemos distribuido a través de varios nodos, ElasticSearch puede guardar absolutamente todos los cambios y registros en un log destinado a ello a través de múltiples nodos en un clúster, lo cual permite minimizar la pérdida de datos.
Uso de requests complejas y afinadas
ElasticSearch posee un poderoso DSL (domain-specific language) basado en JSON que permite a los desarrolladores crear solicitudes complejas y afinarlas todo lo necesario para obtener los resultados de búsqueda más precisos posible. También nos da la posibilidad de agrupar resultados e incluso clasificarlos.
Un solo índice
Algo estupendo de ElasticSearch solo puede salir a la luz cuando tenemos muchos usuarios, cada uno con sus propios documentos. Lo normal en estos casos es que un usuario pueda acceder solo a sus propios documentos, lo cual implica que necesitará su propio índice. En el caso de tener muchos usuarios, esto significa que se van a requerir muchos índices, lo cual puede implicar un mayor tiempo de búsqueda y un mayor uso de recursos, pero esto en ElasticSearch no sucede.
En lugar de usar múltiples índices, ElasticSearch utiliza un solo índice gigante y con sectores restringidos, lo cual ayuda a mejorar el tiempo de búsqueda y ahorrar recursos, incluso si tenemos muchos usuarios con documentos distintos.
Es gratis y de código abierto
Que dejemos esta ventaja para el final no quiere decir que sea la menos importante, no importa el orden, de hecho es probable que esta ventaja sea una de las principales y también una de las grandes razones del éxito de ElasticSearch, porque el ser un software gratuito y respaldado por una gran comunidad ha permitido que tenga un crecimiento asombroso y pueda ser implementado por todo el mundo: desde pequeños sitios webs y empresas hasta grandes corporaciones como Dell en sus servidores para empresas.
Desventajas del Servidor ElasticSearch
Por supuesto no todo es color de rosas, ElasticSearch es muy bueno pero está lejos de ser perfecto o de adaptarse perfectamente a todas las situaciones, y lo cierto es que presenta una serie de desventajas que en algunos casos pueden hacer que nos inclinemos más por otros sistemas similares en su lugar. Veamos entonces cuáles son las desventajas de ElasticSearch.
Falta de soporte multilenguaje
Al contrario que otras soluciones similares como por ejemplo Apache Solr, ElasticSearch no brinda soporte multilenguaje, lo que limita la posibilidad de manejar requests y obtener datos en más de un idioma de manera simultánea. Cabe aclarar que esto no quiere que la herramienta no esté disponible en distintos idiomas, que sí lo está, sino que este punto refiere específicamente a las requests y procesamiento de datos.
No es recomendado para grandes cantidades de datos
Si bien ElasticSearch puede manejar gran cantidad de datos y documentos, lo cierto es que en algunos casos en los cuales la información es demasiada, su uso se puede volver una desventaja. Los casos serán pocos, pero si por ejemplo necesitamos procesar varios TBs de datos al día, entonces tendremos problemas de rendimiento e incluso pérdida de datos si no hay backups. Para estos casos es mejor acudir a herramienta como Hadoop o MongoDB.
Dificultad para utilizarlo
ElasticSearch es sin dudas muy potente y un estupendo software en su campo, sin embargo utilizarlo correctamente no es algo sencillo, el proceso de aprendizaje puede tomar su tiempo, así que si estamos buscando una herramienta de este tipo que podamos comenzar a usar de forma inmediata o después de leer su documentación rápidamente, nos vamos a topar con un problema.
Instalación de Servidor ElasticSearch
ElasticSearch es un software muy fácil de instalar, así que veamos a continuación cómo instalarlo en varias distribuciones de Linux, primero en CentOS y Fedora y posteriormente en Debian y Ubuntu.
Cómo instalar ElasticSearch en CentOS y Fedora
El proceso es muy sencillo, primero que nada vamos a importar la llave pública de ElasticSearch:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
A continuación tenemos que crear el archivo del repo dentro de /etc/yum.repos.d/ de esta forma:
nano -w /etc/yum.repos.d/elasticsearch.repo
Allí pegamos el siguiente contenido que corresponde a la versión 7 de ElasticSearch:
[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
Guardamos el cambio y ejecutamos la instalación según nuestro sistema operativo.
Para CentOS:
yum install --enablerepo=elasticsearch elasticsearch
Para Fedora:
dnf install --enablerepo=elasticsearch elasticsearch
Cómo instalar ElasticSearch en Ubuntu y Debian
Al igual que en el caso de CentOS lo primero es instalar la llave pública de ElasticSearch:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
A continuación nos aseguramos de tener instalado el paquete apt-transport-https:
apt-get install apt-transport-https
Creamos el repo de esta forma:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Y finalmente podemos proceder con la instalación en Debian o en Ubuntu usando este comando:
apt-get update && sudo apt-get install elasticsearch
Conclusión
Como hemos podido ver en esta oportunidad, el servidor ElasticSearch es sin lugar a dudas una de las herramientas más potentes de análisis y búsqueda de datos. Usada por sí sola es muy buena, sin embargo su mayor potencial surge cuando se utiliza en conjunto con Logstash y Kibana como parte del Elastic Stack.
El funcionamiento de Elastic Stack es muy básico en la teoría, ya que lo que hace es tomar los datos que le enviemos, clasificarlos, enriquecerlos e indexar los resultados, para crear un solo índice de documentos y datos donde podemos realizar búsquedas rápidamente, e incluso quedará guardadas en caché en caso de que tengamos que repetirlas.
Posee una gran cantidad de ventajas, como el hecho de ser un software gratuito y abierto, además es fácil de escalar, es veloz, nos permite realizar búsquedas complejas, permite balanceo en múltiples nodos y mucho más. También tiene unas pocas desventajas, pero las mismas solo salen a la luz en escenarios muy particulares, como en el caso del manejo de cantidades de datos gigantes.
¿Qué opinas sobre el servidor ElasticSearch? ¿Lo has probado alguna vez o te animarías a probarlo?