Motor de búsqueda de Elasticsearch | Una introducción

Elasticsearch es un motor de análisis y búsqueda de texto completo basado en Apache Lucene. Elasticsearch facilita la realización de operaciones de agregación de datos en datos de múltiples fuentes y la realización de consultas no estructuradas, como búsquedas aproximadas, en los datos almacenados.

Almacena datos en un formato similar a un documento, similar a cómo lo hace MongoDB. Los datos se serializan en formato JSON. Esto le agrega una naturaleza no relacional y, por lo tanto, también se puede usar como una base de datos NoSQL/no relacional.

Un documento típico de Elasticsearch se vería así:

{
  "first_name": "Divij",
  "last_name":"Sehgal",
  "email":"xyz@gmail.com",
  "dob":"04-11-1995",
  "city":"Mumbai",
  "state":"Maharashtra",
  "country":"India",
  "occupation":"Software Engineer",
}
  • Es distribuido, escalable horizontalmente, ya que en más instancias de Elasticsearch se pueden agregar a un clúster a medida que surja la necesidad, en lugar de aumentar la capacidad de una máquina que ejecuta una instancia de Elasticsearch.
  • Es RESTful y está centrado en API, lo que lo hace más utilizable. Se puede acceder fácilmente a sus operaciones a través de HTTP a través de la API RestFul para que pueda integrarse sin problemas en cualquier aplicación. Además, numerosos contenedores están disponibles en varios lenguajes de programación, lo que evita la necesidad de usar la API manualmente y se puede acceder a la mayoría de las operaciones a través de llamadas a funciones de biblioteca que manejan la comunicación con el motor.
  • A través del uso de operaciones CRUD ( crear , leer , actualizar , eliminar), es posible operar de manera efectiva en los datos presentes en el almacenamiento persistente. Estos son similares a los CRUD logrados por las bases de datos relacionales y se pueden realizar a través de la interfaz HTTP presente en las API RESTful.

¿Dónde usamos Elasticsearch?

Elasticsearch es una buena opción para:

  • Almacenar y operar con datos no estructurados o semiestructurados, que a menudo pueden cambiar de estructura. Debido a la naturaleza sin esquema, agregar nuevas columnas no requiere la sobrecarga de agregar una nueva columna a la tabla. Simplemente agregando nuevas columnas a los datos entrantes a un índice, Elasticsearch puede acomodar una nueva columna y ponerla a disposición de otras operaciones.
  • Búsquedas de texto completo: al clasificar cada documento según su relevancia para una búsqueda mediante la correlación de los términos de búsqueda con el contenido del documento utilizando el recuento TF-IDF para cada documento, las búsquedas aproximadas pueden clasificar los documentos según su relevancia para la búsqueda realizada.
  • Es común utilizar Elasticsearch como herramienta de almacenamiento y análisis de registros generados por sistemas dispares. Las herramientas de agregación como Kibana se pueden usar para crear agregaciones y visualizaciones en tiempo real a partir de los datos recopilados.
  • Funciona bien con el análisis de series temporales de datos, ya que puede extraer métricas de los datos entrantes en tiempo real.
  • Monitoreo de infraestructura en pipelines de CI/CD.

Conceptos de búsqueda elástica

Elasticsearch funciona con un concepto conocido como indexación inversa . Este concepto proviene de la biblioteca Lucene (recuerde Apache Lucene desde arriba).

Este índice es similar a los términos presentes en la parte posterior de un libro, que muestran las páginas en las que cada término importante del libro puede estar presente o discutido. El índice invertido facilita la resolución de consultas a documentos específicos con los que podrían estar relacionados, en función de las palabras clave presentes en la consulta, y acelera el proceso de recuperación de documentos al limitar el espacio de búsqueda de documentos que se considerarán para esa consulta.

Tomemos los siguientes tres diálogos de Game of Thrones :

  1. «Viene el invierno.»
  2. “Una mente necesita libros como una espada necesita una piedra de afilar, si quiere mantener su filo”.
  3. “Todo vuelo comienza con una caída”.
  4. “Las palabras pueden lograr lo que las espadas no pueden”.

Considere cada uno de estos diálogos como un solo documento, es decir, cada documento tiene una estructura como:

{
    "dialogue": "....."
}

Después de un procesamiento de texto simple: después de poner el texto en minúsculas y eliminar los signos de puntuación, podemos construir el «índice invertido» de la siguiente manera:

Término Frecuencia Documentos
a 4 2, 3
realizar 1 4
como 1 2
comienza 1 3
libros 1 2
pueden 1 4
no poder 1 4
viniendo 1 1
borde 1 2
cada 1 3
otoño 1 3
vuelo 1 3
si 1 2
es 2 1, 2
eso 1 2
su 1 2
mantener 1 3
mente 1 2
necesidades 1 2
espada 1 2
espadas 1 3
a 1 2
qué 1 3
piedra de afilar 1 2
invierno 1 1
con 1 3
palabras 1 4
  • Las dos primeras columnas forman lo que se llama el Diccionario . Aquí es donde Elasticsearch busca los términos de búsqueda para saber qué documentos podrían ser relevantes para la búsqueda actual.
  • La tercera columna también se denomina Publicaciones . Esto vincula cada término individual con el documento en el que podría estar presente.

Algunos términos comunes asociados con Elasticsearch son los siguientes:

  • Clúster : un clúster es un grupo de sistemas que ejecutan el motor Elasticsearch, que participan y operan en estrecha correspondencia entre sí para almacenar datos y resolver una consulta. Estos se clasifican aún más, en función de su función en el clúster.
  • Node : un Node es un proceso JVM que ejecuta una instancia del tiempo de ejecución de Elasticsearch, accesible de forma independiente a través de una red por otras máquinas o Nodes en un clúster.
  • Índice : un índice en Elasticsearch es análogo a las tablas en las bases de datos relacionales.
  • Asignación : cada índice tiene una asignación asociada, que es esencialmente una definición de esquema de los datos que puede contener cada documento individual en el índice. Esto se puede crear manualmente para cada índice o se puede agregar automáticamente cuando los datos se envían a un índice.
  • Documento : un documento JSON. En términos relacionales, esto representaría una sola fila en una tabla.
  • Fragmento : los fragmentos son bloques de datos que pueden o no pertenecer al mismo índice. Dado que los datos que pertenecen a un solo índice pueden llegar a ser muy grandes, digamos unos cientos de GB o incluso unos pocos TB, no es factible aumentar el almacenamiento verticalmente. En cambio, los datos se dividen lógicamente en fragmentos almacenados en diferentes Nodes, que operan individualmente en los datos contenidos en ellos. Esto permite la escala horizontal.
  • Réplicas : cada fragmento de un clúster se puede replicar en uno o más Nodes del clúster. Esto permite una copia de seguridad de conmutación por error. En caso de que uno de los Nodes se caiga o no pueda utilizar sus recursos en ese momento, una réplica con los datos siempre está disponible para trabajar con los datos. De forma predeterminada, se crea una réplica para cada fragmento y el número es configurable. Además de la conmutación por error, el uso de réplicas también aumenta el rendimiento de la búsqueda.

Publicación traducida automáticamente

Artículo escrito por sehgaldivij y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *