Elasticsearch (ES) es un motor de búsqueda de código abierto, distribuido y escalable. ElasticSearch tiene una interfaz API extensa y amigable. Con este motor es posible realizar búsquedas de manera rápida.
Búsqueda rápida en grandes volúmenes de datos
Los sistemas de base de datos convencionales no están diseñados para realizar búsquedas en texto completo, y ciertamente, no presentan un buen desempeño hacia el manejo de datos no estructurados.
En una arquitectura de hardware similar, una consulta que tardía cerca de 10 segundos en un motor de búsqueda SQL, en ES el resultado podría obtenerse en menos de 10 milisegundos.
ElasticSearch utiliza un lenguaje denominado DSL para realizar consultas. Una consulta examina uno o varios valores objetivos y escoge uno de los elementos en los resultados de acuerdo con la concordancia del enfoque de la consulta.
Los operadores de consulta permiten optimizar consultas simples o complejas que regularmente arrojan resultados en milisegundos. El esquema de diseño de ElasticSearch es mucho más simple y ágil en comparación con una base de datos relacional convencional debido a que no tiene las restricciones de esquema, tablas, columnas y filas.
La indexación documentos
Durante la operación de indexación, ElasticSearch convierte los datos sin procesar en documentos internos y los almacena en una estructura básica similar a un objeto JSON.
Cada documento en ElasticSearch es un conjunto de claves y valores (key:value). Las claves (key) son un tipo de datos string y los valores pueden ser datos de diferentes tipos: string, enteros, flotantes, listas o fechas.
Agregar elementos en Elasticsearch es fácil de automatizar. A través de su interfaz API enviamos un comando HTTP POST que transmite un documento para ser almacenado como un objeto JSON.
vía API podemos enviar, recibir y verificar cualquier información. Una herramienta muy popular para hacer testing y verificaciones en ElasticSearch es CURL.
$ POST localhost:9200/accounts/person/1
{
"name" : "John",
"lastname" : "Doe",
"job_description" : "Systems administrator and Linux specialit"
}
La respuesta será:
{
"_index": "accounts",
"_type": "person",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
Para recuperar el document:
GET localhost:9200/accounts/person/1
La respuesta contiene metadata y el documento:
{
"_index": "accounts",
"_type": "person",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"name": "John",
"lastname": "Doe",
"job_description": "Systems administrator and Linux specialit"
}
}
Almacenamiento de documentos desnormalizados: acceso rápido y directo a sus datos
ElasticSearch no es una una base de datos relacional, por lo tanto, los conceptos de DBMS no son aplicables. El primer concepto a olvidar es normalización. Nativamente, Elasticsearch no permite uniones o subconsultas, por lo tanto, la desnormalización es esencial.
ElasticSearch almacenará un documento una vez por cada repositorio en el que reside el documento. Las búsquedas de texto serán extremadamente rápidas porque los documentos se almacenan cerca de los metadatos correspondientes en el índice.
Este método reduce en gran medida el número de lecturas de datos y Elasticsearch limita la tasa de crecimiento del índice utilizando compresión.
Arquitectura distribuida y altamente escalable
ElasticSearch puede escalar hasta miles de servidores y almacenar volúmenes de datos en el orden de los petabytes. Su enorme capacidad es el resultado de su arquitectura distribuida. Sin embargo, desde el punto de vista del usuario, la complejidad de la arquitectura es totalmente transparente.
Las siguientes operaciones, que son complejas por naturaleza, se realizan de forma automática e imperceptible:
- Particionar los documentos en diferentes shards (contenedores).
- Distribución de las particiones en los diferentes nodos del cluster.
- Balancear las particiones de forma equitativa entre los diferentes nodos para indexar y distribuir la carga de las búsquedas.
- Utilización de réplicas duplicando las particiones para proveer redundancia y tolerancia a falla.
- Enrutamiento de las peticiones hacia nodos específicos que contienen los datos.
- Agregar nodos al cluster para incrementar su tamaño es bastante fácil.
- Redistribución automática de las particiones para la recuperación de la información en caso que ocurra una falla en un nodo.
ElasticSearch es un motor de búsqueda muy utilizado en la actualidad. Entender su estructura y funcionamiento es vital para aquellos que trabajan con sistemas de información complejos y distribuidos.