Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PRESTACIONES
21/22
Trabajo:
Elasticsearch
1
Introducción 3
Antecedentes 3
Índice Invertido 3
Conclusiones 11
Bibliografía 12
2
Introducción
En 2004, Shay Bannon se encontraba realizando un viaje con su mujer en Londres en el
cual ella estaba estudiando para convertirse en chef. Mientras trataba de encontrar trabajo,
comenzó a practicar con las primeras versiones de Lucene, una biblioteca java para
motores de búsqueda y recuperación de información, con el objetivo de crear un motor de
búsqueda de recetas para su mujer. En este proceso se da cuenta que trabajar con esta
biblioteca es bastante complejo así que comienza a desarrollar en una capa de abstracción
superior a Lucene, que se llamó Compass, que permitiera a los desarrolladores incorporar
motores de búsqueda en sus aplicaciones de forma más simple.
Años después, Shay comienza a trabajar en un entorno de alto rendimiento, y esto le lleva a
darse cuenta de que Compass no es escalable, lo cual puede ser un gran problema de cara
a futuro. En 2010 finalmente se da cuenta que por su arquitectura Compass no le permite
hacer lo que quiere, y decide destruirlo por completo para crear en su lugar Elasticsearch
con tres objetivos básicos: que sea un sistema distribuido, escalable, y de fácil uso.
Antecedentes
Lucene es, como se indicó previamente, una biblioteca de Java gratuita y de código abierto
que facilita la recuperación de información y permite crear motores de búsqueda.
Sus principales características son:
- Es open source
- Escalable
- Proporciona búsquedas de alto rendimiento
- Usa índices invertidos para la búsqueda.
Índice Invertido
Es el corazón de Lucene y, por tanto, también de Elasticsearch. En él se almacenan todos
los términos que aparecen en todos los documentos.
El índice clásico consiste en una tabla en la cual tienes como primer campo un identificador
y otro en el que almacenas el término a buscar. Estos índices son muy buenos para realizar
búsquedas por identificador, pero para búsquedas por término se vuelven más complejos y
bajan mucho el rendimiento.
3
En cambio, en los índices invertidos, en el primer campo se almacena el término, y en el
segundo los índices de los documentos en los que aparece. Este tipo de índices mejoran de
forma notoria las búsquedas por términos en conjuntos de documentos.
Este índice puede mejorarse si en vez de solo almacenar el identificador del documento,
almacenamos un par identificador, posición del término dentro del documento. En este caso
la búsqueda es directa y tendría tiempos constantes.
4
Desarrollo y/o análisis
¿Qué es?
Elasticsearch es una base de datos que utiliza NoSQL open source ,algo muy popular en
Big Data basado en Apache Lucene como motor de búsqueda. La empresa que da soporte
al producto se llama Elastic, en la cual se encuentran la mayor parte de los programadores
del proyecto, el cual utiliza el lenguaje de programación Java.
Además, Elasticsearch nos permite almacenar datos de una forma escalable y realizar
búsquedas de texto más avanzadas que las disponibles en SQL o con expresiones
regulares. Esto resulta muy útil, por ejemplo para realizar búsquedas y análisis en nuestra
base de datos.
También, permite reconocer lexemas, abreviaturas, extraer las posiciones de las palabras,
sus frecuencias de aparición, etc
Características Elasticsearch
Orientación a Documentos
- Es una base de datos implementada en NoSQL, el cual está orientado a
documentos JSON, como MongoDB. Por lo cual no necesita que se definan
esquemas a la hora de insertar los datos.
Escalabilidad
- Elasticsearch es una base de datos distribuida que escala de manera dinámica de
forma horizontal, por lo que a mayor demanda, mayor número de nodos iremos
creando.
5
- Los documentos son divididos mediante técnicas de sharding, por lo cual los va
distribuyendo a diferentes nodos. Esta distribución permite que las cargas de
búsqueda se distribuyan por los diferentes nodos, mejorando los tiempos de
respuesta.
- Elasticsearch enruta las peticiones al nodo específico del cluster el cual tenga la
información necesaria que necesitemos.
- En el caso de que haya algún problema, Elasticsearch puede detectar que nodo está
fallando. De esta manera es capaz de reorganizar la información y conseguir que los
datos siempre sean accesibles.
6
Por ejemplo, podemos usar la API para crear un nuevo índice con un mapping explícito de
la siguiente forma:
Si queremos interaccionar mediante la API, podemos hacerlo con una llamada CURL desde
la consola especificando nuestro endpoint (localhost) y el content-type (JSON):
7
De esta forma, crearemos índices con tres campos con sus tipos de datos: edad (entero),
correo electrónico (contraseña) y nombre (texto). Posteriormente, es posible cambiar este
índice agregando nuevos campos.
En cualquier momento podemos hacer una consulta GET en la API para saber el mapping
de un índice:
También podemos usar la API GET /cat/indices para listar los índices.
Herramientas
Elasticsearch dispone de diversas herramientas para realizar consultas y trabajar con los
datos almacenados. Por un lado, existen clientes REST como curl o Postman los cuales nos
permiten interaccionar con la API directamente. Por otro lado, tenemos clientes para
diferentes lenguajes de programación como Python o Java. También tenemos la posibilidad
de realizar consultas ODBC o JDBC usando SQL.
También tenemos Kibana, la interfaz oficial de Elastic, que es un proyecto muy popular. Es
una aplicación de servidor que requiere Elasticsearch la cual nos permite implementar
interfaces para visualizar y monitorizar los datos.
8
Ejemplo de Dashboard en Kibana
Arquitectura de Elasticsearch
Es imprescindible entender el concepto de “shard” si queremos entender la arquitectura de
Elasticsearch. Un shard es una instancia de un índice de Lucene que contiene un
subconjunto de los datos. También son las unidades de distribución de datos del clúster.
Por defecto hay 5 shards por índice.
Este diseño permite a Elasticsearch usar cada shard en hebras diferentes, aumentando la
paralelización del algoritmo de búsquedas para aumentar de forma significativa el
rendimiento.
9
Por defecto existe 1 réplica por cada shard primario. Además, es posible realizar snapshots
y restaurar backups de todos los datos e índices.
En el esquema podemos ver la relación entre los segmentos y los índices de Elasticsearch y
Lucene.
10
Es recomendado separar estos roles en diferentes nodos en clústeres grandes (a partir de
10 nodos).
Los servicios del clúster se comunican entre ellos por el puerto TCP 9300. También se
puede habilitar el autodescubrimiento de nodos, de forma que se facilita la configuración del
clúster.
La configuración de Elasticsearch es muy flexible, y merece la pena investigar en la
documentación por las posibilidades que ofrece. El formato de esta configuración es YAML
(yml).
Conclusiones
11
Bibliografía
Parte alberto
- https://www.ecured.cu/Elasticsearch#:~:text=Historia,b%C3%BAsqueda%20de%20r
ecetas%20para%20ella.
- https://www.youtube.com/watch?v=ehCMj7E51bs&ab_channel=OpenWebinars
- https://www.youtube.com/watch?v=UIN2NeMb7xc&t=1247s&ab_channel=Paradigma
Digital
- https://www.ionos.es/digitalguide/servidores/configuracion/apache-lucene/
https://www.elastic.co/es/elasticsearch/
https://www.davincigroup.es/elastic/
https://www.youtube.com/watch?v=UIN2NeMb7xc(Curso ElasticSearch de Paradigma
Digital)
https://www.redhat.com/es/topics/api/what-is-a-rest-api#:~:text=Una%20API%20de%20RES
T%2C%20o,de%20estado%20representacional%20(REST)
https://www.elastic.co/es/what-is/elasticsearch
https://aprenderbigdata.com/elasticsearch/
https://www.arquitectoit.com/elasticsearch/que-es-elasticsearch/
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html
12