¿Qué es y cómo funciona Elasticsearch?

Hablamos de Elasticsearch, sin duda una de las herramientas más populares en los últimos tiempos, creada con el fin de realizar búsquedas en grandes cantidades de datos. En uno de los últimos artículos en la web, donde os hablaba de las últimas tendencias en el mundo IT, os hablé de ella.

La necesidad de una herramienta como Elasticsearch

En nuestra cada vez más compleja sociedad de la información, navegar entre toneladas de información puede ser algo realmente complicado y tedioso. En los últimos años todos estamos aún más conectados si cabe. Acceder a múltiples canales de información está en nuestra mano en tan solo unos pocos clicks.

Y aunque esto tiene un sinfín de ventajas, también puede ser un problema cuando quieres buscar unos patrones exactos, entre tanta marabunta de información.

Justamente Elasticsearch busca ayudarnos en este cometido. Separar el grano de la paja, dentro de este inmenso granero llamado “Big Data”, y mostrarla de forma legible además de ordenada.

¿Qué es Elasticsearch?

Se trata de un motor de búsqueda y análisis. Es distribuible y fácilmente escalable, enfocado sobre todo al mundo empresarial y científico. Es accesible a través de una extensa y elaborada API. Con esta herramienta podemos impulsar búsquedas extremadamente rápidas que respalden nuestras aplicaciones de descubrimientos de datos.

Está escrito en Java, utilizando la filosofía de desarrollo de código abierto y utiliza una licencia Apache, similar a la de software libre.

Trabajo conjuntamente con un motor de recopilación de datos llamado Logtash, y una plataforma de análisis y visualización llamada Kibana. Los tres productos están diseñados para trabajar de manera conjunta, una solución llamada “Elastic Stack” (anteriormente llamada ELK)

Sus características:

  • Es orientado a documentos: Utiliza JSON
  • No utiliza esquemas, aunque si son necesarios se pueden llegar a definir
  • Distribuido: Realiza escalado de manera dinámica, implementa alta disponibilidad (HA)
  • Utiliza una potente API: expone prácticamente todas sus funcionalidades utiliza una API REST
  • Permite búsquedas tanto estructuras como no estructuradas

Principales ventajas:

  • Rápido: Mediante el uso de índices invertidos distribuidos, Elasticsearch encuentra rápidamente las mejores coincidencias para nuestras búsquedas de texto completo, incluso de conjuntos de datos muy grandes.
  • API fácil de usar: Elasticsearch ofrece una API potente, una interfaz HTTP simple además de utilizar documentos JSON sin esquemas, lo que facilita su indexar, buscar y consultar datos.
  • El poder de tres: Elasticsearch viene integrado con Kibana, una de las herramientas más populares para la visualización de informes. Se integra con Logtash para tranformar los datos utilizando plantillas predefinidas y así cargarlos en un índice.
  • Actualizaciones de índice en tiempo real: Las actualizaciones de índice de Elasticsearch, como por ejemplo agregar un nuevo documento al índice, generalmente puede demorar un segundo o incluso menos; este le permite a Elasticsearch utilizarse para fines que necesiten un tiempo muy rápido de respuesta.
  • Soporte para nuestros lenguajes de desarrollo favoritos: existen una larga lista de clientes de fuente abierta, para los desarrolladores que deseen utilizar Elasticsarch, como por ejemplo para Java, PHP, Python, JavaScript, Node.js u otros.

¿Cómo funciona Elasticsearch?

Su funcionamiento es simple y sólo conlleva una ligera curva de aprendizaje. En contraposición con los sistemas de bases de datos relacionales como SQL, ya que estos no están pensados para la cantidad de datos que puede llegar a manejar Elasticsearch.

Durante una operación de indexación, por mostrar un ejemplo, convierte datos sin formato, como archivos de registro o archivos de mensajes, en documentos internos y los almacena en una estructura de datos básica similar a un objeto JSON.

Cada documento resultante es un conjunto simple de claves y valores correlativos: las claves son cadenas y los valores son uno de los numerosos tipos de datos: cadenas, números, fechas o listas.

Un ejemplo de consulta contra una instalación local:

  1. GET localhost:9200/_search?q=john

Obtendríamos el resultado:

  1. {
  2.     "took": 58,
  3.     "timed_out": false,
  4.     "_shards": {
  5.         "total": 5,
  6.         "successful": 5,
  7.         "failed": 0
  8.     },
  9.     "hits": {
  10.         "total": 2,
  11.         "max_score": 0.2876821,
  12.         "hits": [
  13.             {
  14.                 "_index": "accounts",
  15.                 "_type": "person",
  16.                 "_id": "2",
  17.                 "_score": 0.2876821,
  18.                 "_source": {
  19.                     "name": "John",
  20.                     "lastname": "Smith",
  21.                     "job_description": "Systems administrator"
  22.                 }
  23.             },
  24.             {
  25.                 "_index": "accounts",
  26.                 "_type": "person",
  27.                 "_id": "1",
  28.                 "_score": 0.28582606,
  29.                 "_source": {
  30.                     "name": "John",
  31.                     "lastname": "Doe",
  32.                     "job_description": "Systems administrator and Linux specialist"
  33.                 }
  34.             }
  35.         ]
  36.     }
  37. }

Este ejemplo ha sido extraído de la documentación oficial:

A practical Introduction to Elasticsearch

¿Dónde la puedo utilizar?

Podemos instalar el software directamente en nuestra distribución favorita GNU/Linux, ya sea en un servidor físico o virtual; también tenemos el producto disponible en plataformas de terceros como Amazon AWS, Windows Azure u otros. También lo podemos instalar sobre sistemas privativos como Microsoft Windows

Más artículos

Mi intención es elaborar más artículos al respecto, donde veremos su instalación sobre un servidor GNU/Linux, su configuración junto a Kibana y Logtash, más un buen puñado de ejemplos.

Aquí os dejo los artículos escrito al respecto hasta ahora:

Instalar Elasticsearch en Centos 7
Instalar Elastic Stack en Centos 7

Para el artículo sólo he consultado documentación oficial y la entrada en Wikipedia

Estar atentos ?