Elasticsearch es un motor de almacenamiento y búsqueda de documentos en formato JSON y construido en Lucene. Estos documentos se organizan índices de acuerdo a nuestros requerimientos. Los índices internamente se dividen en shards los cuales pueden residir en diferentes nodos. Una de las principales características es que nos permite tener una arquitectura distribuida, escalable y de alta disponibilidad.

 

¡Alto! ...Antes de continuar, debes conocer

  • Lucene: Apache Lucene es una API de código abierto para recuperación de información, originalmente implementada en Java por Doug Cutting. Lucene tiene versiones para otros lenguajes incluyendo Delphi, Perl, C#, C++, Python, Ruby y PHP. Es útil para cualquier aplicación que requiera indexado y búsqueda a texto completo. Lucene ha sido ampliamente usado por su utilidad en la implementación de motores de búsquedas. El centro de la arquitectura lógica de Lucene se encuentra el concepto de Documento (Document) que contiene Campos (Fields) de texto. Esta flexibilidad permite a Lucene ser independiente del formato del fichero. Textos que se encuentran en PDF, páginas HTML, documentos de Microsoft Word, así como muchos otros pueden ser indexados mientras que se pueda extraer información de ellos.
  • Shards: una partición horizontal de data en una base de datos o search engine.

Elastic Search te permite realizar infinitos tipos de búsqueda: estructurada, no estructurada, geolocalización y métricas, es decir todo lo que deseemos. Sólo basta con saber qué buscar. Es ideal para los proyectos en donde trabajemos con big data

Para interactuar con Elasticsearch lo más sencillo es usar su interfaz REST que por defecto escucha en el puerto 9200. Es muy fácil usar software como curl para realizar dichas peticiones. Aparte de los GET, PUT, POST, DELETE de http, la información que necesita Elasticsearch viaja en formato JSON. La mayoría de las respuestas que da el servidor de Elasticsearch son también en este formato. Existe otro método para interactuar con el clúster de Elasticsearch y es el llamado API de transporte, donde el sistema cliente simula ser otro nodo del clúster. Hay multitud de librerías que encapsulan este acceso al servidor como Python Elasticsearch Client para Python.

Ventajas

Se podrían enumerar varias ventajas que brinda esta herramienta. Algunas de las más destacables son las siguientes:

  • Al estar desarrollado en Java, es sumamente compatible con casi todas las plataformas.
  • Tiene una gran velocidad de respuesta.
  • Esta distribuido, lo que lo hace fácilmente escalable y adaptable a las distintas situaciones.
  • Simple realizar respaldos de los datos que se tienen.
  • Utiliza objetos JSON como respuesta, por lo que es fácil de invocar a partir de varios lenguajes de programación.

Desventajas

Como todo, ElasticSearch posee algunas (pocas) desventajas:

  • Solo soporta como tipos de respuesta JSON, lo que, si bien lo hace accesible, también lo limita al no involucrar otros lenguajes, como podrían ser: CSV o XML.
  • Puede suceder que en algunas situaciones caiga en un caso de “split brain”.

Primeros Pasos

ElasticSearch puede ser instalada en todos los sabores de SO existentes inclusive, existe una imagen de docker lista para su uso.

Para efectos prácticos, realizaremos la instalación en un entorno Windows, accediendo al siguiente paso a paso: https://www.elastic.co/guide/en/elasticsearch/reference/current/windows.html

Una vez hayamos configurado nuestro nodo y nuestro clúster de ES, podemos hacer una prueba para asegurarnos de que nuestra instalación fue satisfactoria (recuerda, el puerto 9200 es el que se usa por defecto):

Si todo está perfecto, debemos obtener esta respuesta:

Pues sí, tiene un api llamado CAT con el que puedes realizar diversas configuraciones en ES.

Pero…¿Qué es Cat API?

JSON es genial … pero para las computadoras. Tratar de encontrar en un JSON relaciones en los datos es tedioso aunque sea mostrado de la forma mas amigable posible. Los ojos humanos, especialmente al mirar un terminal ssh, necesitan un texto compacto y alineado. El cat API tiene como objetivo satisfacer esta necesidad.

Todos los comando de cat API aceptan el query string help  para ver toda la información que provee, el comando /_cat  lista todos los comandos permitidos. Para muestra, este ejemplo:

 

Si quieres adentrarte mucho más en el mundo de ElasticSearch, espera mi próximo blog!!!!

Share: