Curso de ElasticSearch

Elastic Search es una potente y altamente escalable herramienta de búsqueda y análisis de datos en tiempo real. Es parte de la suite de productos de Elastic, diseñada para simplificar y optimizar la gestión de datos no estructurados en grandes volúmenes.

En esta serie de vídeos aprenderás todo sobre este motor de analítica y búsqueda escalable: Qué es elasticsearch, para qué sirve y cómo se utiliza, paso a paso.

¿Empezamos?

Qué es ElasticSearch

Elasticsearch se basa en el motor de búsqueda de código abierto Apache Lucene y utiliza una arquitectura distribuida para proporcionar una búsqueda rápida y precisa en un conjunto diverso de datos. Te permite indexar y buscar información en tiempo real, lo que lo convierte en una solución ideal para aplicaciones que requieren análisis en tiempo real de grandes conjuntos de datos, como aplicaciones de búsqueda web, análisis de registros y monitoreo de infraestructuras.

Con Elasticsearch, podrás almacenar, buscar y analizar datos estructurados y no estructurados de manera eficiente y en tiempo real. Además, ofrece una gran flexibilidad y escalabilidad, permitiendo agregar y procesar datos en diferentes formatos, como texto, números, fechas y geolocalización.

 La capacidad de Elasticsearch para realizar búsquedas rápidas y precisas, su capacidad de escala horizontal y su flexibilidad lo convierten en una herramienta popular en el campo del análisis de datos y la búsqueda de información en tiempo real. 

Esto y más es lo que te cuento, a continuación:

Nodos, réplicas y shards: La arquitectura de ElasticSearch

Una de las principales ventajas de ElasticSearch es su arquitectura altamente escalable y distribuida. Para lograr esto, se utiliza el concepto de nodos, que son instancias individuales de ElasticSearch que se ejecutan en diferentes máquinas.

Un conjunto de nodos se agrupa en un clúster, lo que permite crear una infraestructura robusta y tolerante a fallos. Cada nodo dentro del clúster contiene tanto shards como réplicas.

Los shards son fragmentos de los datos que se almacenan y distribuyen en diferentes nodos. Estos fragmentos permiten distribuir la carga de trabajo y mejorar el rendimiento general del sistema. Cada shard es independiente y contiene solo una porción de los datos.

Por otro lado, las réplicas son copias exactas de los shards primarios. Estas réplicas brindan redundancia y garantizan la disponibilidad de los datos en caso de fallas. Además, permiten mejorar la capacidad de respuesta al distribuir las consultas entre las réplicas.

La combinación de shards y réplicas garantiza una mayor seguridad y recuperabilidad de la información almacenada en los índices de ElasticSearch. En caso de que un nodo falle, los shards y réplicas se redistribuyen automáticamente en los nodos restantes, asegurando la integridad de los datos y la continuidad del servicio.

Veamoslo de forma más específica:

Cómo instalar ElasticSearch 8.5 en Ubuntu y Mac

Aprende cómo instalar Elastic Search paso a paso en tu sistema operativo Ubuntu y Mac, siguiendo los pasos que se encuentren en el sitio oficial de Elasticsearch.

Cómo indexar o insertar documentos (método POST – PUT)

Indexar documentos en ElasticSearch es fundamental para organizar y acceder a la información de manera eficiente. Para lograrlo, podemos utilizar diferentes métodos a través del API de ElasticSearch, como el POST y el PUT, cada uno con sus propias particularidades.

El método PUT se utiliza para indexar documentos y requiere una estructura específica de indexado. Al enviar la solicitud, recibiremos una respuesta que indica si el indexado se realizó correctamente.

Por otro lado, el método POST también permite indexar documentos, pero con algunas diferencias. Además, podemos utilizar el comando «_create» para indexar documentos de forma individual.

Además, existe la opción de utilizar la API masiva o bulk API, que permite indexar múltiples documentos en una sola solicitud. Esta opción es especialmente útil cuando se maneja un gran volumen de datos.

Cómo actualizar un documento (metodo POST)

La actualización de documentos en ElasticSearch es una tarea importante para mantener la información actualizada y precisa. Para lograrlo, podemos utilizar tanto el método POST como el método PUT.

El método PUT nos permite reemplazar los campos existentes en un documento o agregar nuevos campos. Al enviar una solicitud de actualización, podemos modificar y mejorar la información contenida en el documento.

Además, también podemos utilizar la función de script en combinación con el método POST. Esto nos brinda la capacidad de realizar acciones lógicas sobre los valores de los atributos existentes en el documento. Esta funcionalidad es especialmente útil cuando se requiere una manipulación más avanzada de los datos.

Cómo obtener documentos (método GET – POST)

Para obtener documentos en ElasticSearch, el método GET es comúnmente utilizado. Sin embargo, en ocasiones, puede haber restricciones para enviar un body en una solicitud GET. En estos casos, se puede emplear el método POST, que funciona de manera similar al GET.

Dicho esto, puedes obtener documentos de un índice específico, acceder a todos los documentos de varios índices o incluso obtener el mapeo de un índice en particular.

Además, puedes verificar la existencia de un documento utilizando el método HEAD y obtener un documento específico mediante su ID. También existen opciones como «source» para obtener solo el contenido del documento sin metadatos adicionales, y «query params» para refinar la búsqueda y obtener documentos que cumplan con ciertos criterios.

Cómo eliminar un documento (método DELETE)

Eliminar documentos o índices en ElasticSearch se puede realizar mediante el uso del método DELETE. Sin embargo, también es posible utilizar el método POST con la opción «delete by query» para realizar una eliminación condicional, basada en los atributos proporcionados en el body para realizar coincidencias.

Hablaremos de cómo eliminar un índice completo en ElasticSearch. Además, eliminaremos un documento específico mediante su ID y utilizaremos la opción «delete by query» para eliminar documentos que cumplan con ciertos criterios.

Mapeo de campos (mapping)

El mapping o mapeo de datos es el proceso en el cual, especificamos el tipo de dato que van a recibir los campos de un índice en Elasticsearch.

Y es que a la hora de definir el mapo de datos, podemos encontrar dos formas. La primera es el mapeo dinámico, en la que Elasticsearch, define partir del indexado de los documentos, el tipo de dato que tendrá cada campo. La segunda y es la que hablamos en este vídeo, es el mapeo explícito.

Con el mapeo explícito especificamos qué tipo de dato tendrá cada campo. Existen multiples tipos para cada dato, desde números hasta texto, keyword y json (json, flattened, nested) para objetos.

Todo esto lo aterrizamos con un ejemplo de mapping en Elasticsearch.

Score en Elastic Search

El score en Elastic Search, por definición es un valor numérico que se utiliza para indicar la relevancia de un documento en relación con una consulta de búsqueda específica. En otras palabras, el score es un indicador de la «calidad» de un documento en términos de su relevancia para una consulta determinada.

ElasticSearch nos dice qué tan relevante es un documento a través del score, en la medida en que, para resultados de búsqueda, los documentos con mayor score, están ubicados en la parte superior del json de respuesta.

 Esto es posible a través de un algoritmo denominado BM25, el algoritmo empleado hoy día en Elasticsearch para calcular el score. Este algoritmo, que emplea términos como term frequency, inverse document frequency y field length, nos permite detectar la relevancia de un documento al compaginar los conceptos de precision y recall, todo para el cálculo del score. 

Además de ser un indicador de relevancia, el score también puede ser utilizado para ordenar los resultados de una consulta de búsqueda. Por defecto, Elastic Search ordena los resultados por orden descendente de score, lo que significa que los documentos más relevantes aparecen primero en los resultados de búsqueda.

Búsqueda (queries DSL – SEARCH API) de documentos

El lenguaje de consulta de Elastic Search, conocido como DSL, es una de las características más importantes y poderosas de la plataforma. Con DSL, es posible definir consultas detalladas y precisas para buscar datos en Elastic Search.

O dicho de otra forma, las queries DSL nos permitirán realizar mejores búsquedas en ElasticSearch, dado que nos permiten especificar diferentes criterios para obtener los documentos que necesitamos.

De esta forma, podemos refinar y personalizar las consultas de búsqueda. Por ejemplo, es posible utilizar filtros de rango para buscar documentos que contengan valores numéricos dentro de un rango específico, o filtros geoespaciales para buscar documentos en función de su ubicación geográfica.

Podríamos utilizar match para realizar búsquedas de texto completo en cualquier orden, o utilizar term para hacer búsquedas exactas. Elastic Search nos ofrece muchas clausulas para ajustar nuestras búsquedas, hoy hablamos de las cláusulas simples que más vamos a utilizar, pero también hablamos sobre cómo utilizarlas con bool para realizar queries complejas, para de esta manera buscar documentos con múltiples condiciones.

Hablamos también de score, de scripting y abordamos ejemplos prácticos para entender cómo funciona la Search API de Elastic Search.

Agregaciones (aggregations) en Elastic Search

Las agregaciones son una de las características más potentes y útiles de Elastic Search. Con las agregaciones lograremos que los datos almacenados en Elastic Search sean analizados, resumidos y visualizados de una manera más efectiva.

Existen tres tipos principales de agregaciones en Elastic Search: métricas, bucket y pipeline. Las agregaciones de tipo métrica proporcionan información sobre valores numéricos en los datos, como el promedio, la suma o el máximo. Por ejemplo, una agregación de promedio puede utilizarse para determinar el promedio de precios de un producto.

Las agregaciones de tipo bucket, por otro lado, agrupan datos en «cubetas» o «buckets» en función de ciertos criterios. Por ejemplo, una agregación de términos puede utilizarse para agrupar los datos por los valores de un campo determinado, como las categorías de productos en un catálogo de compras.

Finalmente, las agregaciones de tipo pipeline son utilizadas para procesar los resultados de otras agregaciones. Por ejemplo, una agregación de diferencia podría ser utilizada para calcular la diferencia entre los resultados de dos agregaciones de tipo métrica.

Deja un comentario

Responsable de tus datos: Diego Betancourt. Finalidad: Moderación de los comentarios por el tiempo que dure este post publicado o hasta que decidas borrar tu comentario. Legitimación: Tu consentimiento otorgado en este formulario. Destinatario: Wordpress.Derechos: Tienes derechos de acceso, rectificación, cancelación y oposición de tus datos. Este sitio usa Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.

Ingenio Empresa