¿Qué es Elasticsearch?
Cuando se almacena un documento, es prácticamente instantáneo: está completamente indexado y permite realizar búsquedas en menos de 1 segundo. Elasticsearch utiliza una estructura de datos llamada índice invertido para admitir búsquedas de texto completo muy rápidas. Un índice invertido enumera cada palabra única en cualquier documento e identifica todos los documentos en los que aparece cada palabra.
Un índice puede considerarse como una colección optimizada de documentos. Cada documento es una colección de campos, y los campos son pares clave-valor que contienen datos. De forma predeterminada, Elasticsearch indexa todos los datos en cada campo y cada campo indexado tiene una estructura de datos dedicada y optimizada. Por ejemplo, los campos de texto se almacenan en un índice invertido y los campos numéricos y geográficos se almacenan en un árbol BKD. La capacidad de ensamblar y devolver resultados de búsqueda utilizando estructuras de datos para cada campo es lo que hace que Elasticsearch sea tan rápido.
Elasticsearch también tiene la capacidad de no tener modo, lo que significa que los documentos se pueden indexar sin especificar explícitamente cómo manejar cada campo diferente que pueda aparecer en el documento. Cuando el mapeo dinámico está habilitado, Elasticsearch detecta automáticamente nuevos campos y los agrega al índice. Este comportamiento predeterminado facilita la creación de un índice y la exploración de sus datos: tan pronto como comience a crear un documento de índice, Elasticsearch detectará valores booleanos, de punto flotante y enteros, fechas y cadenas y los asignará al tipo de datos apropiado de Elasticsearch.
Pero, en última instancia, usted conoce sus datos mejor que Elasticsearch y cómo desea utilizarlos. Puede definir reglas para controlar la asignación dinámica y definir asignaciones explícitamente para brindar control total sobre cómo se almacenan e indexan los campos.
Definir su propio mapeo le permite:
A menudo es útil indexar los mismos campos de diferentes maneras para diferentes propósitos. Por ejemplo, es posible que desee indexar un campo de cadena como campo de texto para búsqueda de texto completo y como campo de palabra clave para ordenar o agregar datos. Alternativamente, puede optar por utilizar un analizador multilingüe para procesar el contenido de los campos de cadena que contienen la entrada del usuario.
Las cadenas de análisis aplicadas a los campos de texto completo durante el proceso de indexación también se utilizan durante el proceso de búsqueda. Al consultar un campo de texto completo, el texto de la consulta se analiza de la misma manera antes de buscar el término en el índice.
Si bien puede utilizar Elasticsearch como documento para almacenar y recuperar documentos y sus metadatos, su verdadero poder radica en su fácil acceso al conjunto completo de búsquedas creadas sobre la biblioteca del motor de búsqueda Apache Lucene Function.
Elasticsearch proporciona una API REST simple y consistente para administrar clústeres, indexar y buscar datos. Para fines de prueba, puede enviar solicitudes fácilmente directamente desde la línea de comandos o mediante la consola de desarrollador en Kibana. En la aplicación, puede utilizar el cliente Elasticsearch para elegir un idioma: Java, JavaScript, Go, . net, PHP, Perl, Python o Ruby.
La API REST de Elasticsearch admite consultas estructuradas, consultas de texto completo y consultas complejas que combinan ambas. Las consultas estructuradas son similares a los tipos de consultas que puede crear en SQL. Por ejemplo, puede buscar en el índice de empleados los campos de género y edad y ordenar las coincidencias según el campo de fecha de contratación. Las consultas de texto completo encuentran todos los documentos que coinciden con la cadena de consulta y los devuelven según su relevancia (qué tan bien coinciden con los términos de búsqueda).
Además de buscar un solo término, también puedes realizar búsquedas de frases, búsquedas de similitudes y búsquedas de prefijos para obtener sugerencias de finalización automática.
¿Hay datos geoespaciales u otros datos digitales que quieras buscar? Elasticsearch indexa datos que no son texto en estructuras de datos optimizadas y admite consultas geográficas y numéricas de alto rendimiento.
Puede acceder a todas estas capacidades de búsqueda utilizando el completo lenguaje de consulta estilo json (query DSL) de Elasticsearch. También puede crear consultas de estilo SQL para buscar y agregar datos de forma nativa en Elasticsearch. Los controladores JDBC y ODBC permiten que muchas aplicaciones de terceros interactúen con Elasticsearch a través de SQL.
Las agregaciones de Elasticsearch le permiten crear resúmenes de datos complejos y obtener información sobre métricas, patrones y tendencias clave. Las agregaciones le permiten responder preguntas como esta, en lugar de la proverbial "aguja en el pajar":
También puede usar agregaciones para responder preguntas más sutiles, como
Porque las agregaciones son utilizado con Se buscan las mismas estructuras de datos, por lo que también son muy rápidos. Esto le permite analizar y visualizar datos en tiempo real. Sus informes y paneles se actualizan a medida que cambian sus datos, para que pueda tomar medidas basándose en la información más reciente.
Además, las agregaciones se ejecutan junto con las solicitudes de búsqueda. Puede buscar documentos, filtrar resultados y realizar análisis de los mismos datos simultáneamente en una sola solicitud. Debido a que la agregación se calcula en el contexto de una búsqueda específica, no solo muestra el número de agujas de tamaño 70, sino también el número de agujas de tamaño 70 que coinciden con los criterios de búsqueda del usuario, por ejemplo, agujas de bordar antiadherentes de tamaño 70
Elasticsearch siempre está disponible y puede escalar según sus necesidades. Lo hace a través de distribución natural. Puede agregar servidores (nodos) a su clúster para aumentar la capacidad y Elasticsearch distribuye automáticamente sus datos y la carga de consultas a todos los nodos disponibles. Elasticsearch no necesita revisar la aplicación; sabe cómo equilibrar los clústeres de múltiples nodos para proporcionar escala y alta disponibilidad. Cuantos más nodos, mejor.
¿Cómo funciona esto? De hecho, un índice de Elasticsearch es simplemente una agrupación lógica de uno o más fragmentos físicos, donde cada fragmento es en realidad un índice independiente. Al distribuir documentos en el índice en múltiples fragmentos y distribuir esos fragmentos a múltiples nodos, Elasticsearch garantiza la redundancia, no solo protegiendo contra fallas de hardware sino también aumentando la capacidad de consulta a medida que se agregan nodos al clúster. A medida que el clúster crece (o se reduce), Elasticsearch migra automáticamente los fragmentos para reequilibrar el clúster.
Hay dos tipos de fragmentos: fragmentos base y fragmentos de réplica. Cada documento del índice pertenece a un sector maestro. Un segmento de réplica es una copia del segmento principal. Las réplicas proporcionan copias redundantes de datos para proteger contra fallas de hardware y aumentar la capacidad de atender solicitudes de lectura, como buscar o recuperar documentos.
Cuando se crea un índice, el número de fragmentos primarios en el índice es fijo, pero el número de fragmentos duplicados se puede cambiar en cualquier momento sin interrumpir la indexación o las operaciones de consulta.
Existen muchas consideraciones de rendimiento y compensaciones con respecto al tamaño de los sectores configurados para un índice y el número de sectores principales. Cuanta más fragmentación haya, más caro será mantener estos índices. Cuanto más grande sea el fragmento, más tiempo llevará moverlo cuando Elasticsearch necesite reequilibrar el clúster.
Consultar una gran cantidad de fragmentos pequeños puede hacer que cada fragmento se procese más rápido, pero más consultas significan más gastos generales, por lo que consultar una pequeña cantidad de fragmentos grandes puede ser más rápido. En definitiva, depende de la situación.
La mejor manera de determinar la mejor configuración para su caso de uso es probarla con sus propios datos y consultas.
Por motivos de rendimiento, los nodos del clúster deben estar en la misma red. Equilibrar los fragmentos del clúster entre nodos en diferentes centros de datos lleva demasiado tiempo. Pero la arquitectura de alta disponibilidad requiere que usted evite poner todos los huevos en la misma canasta.
Cuando se produce una falla importante en una ubicación, los servidores de otra ubicación deben poder hacerse cargo. Sin costura. ¿Respuesta? Replicación entre clústeres (CCR).
CCR proporciona una forma de sincronizar automáticamente índices de un clúster primario a un clúster remoto secundario que se puede utilizar como copia de seguridad en caliente. Si el clúster primario falla, el clúster secundario puede tomar el control. También puede utilizar CCR para crear un clúster secundario para atender solicitudes de lectura que estén geográficamente cerca de sus usuarios.
La replicación entre clústeres es una replicación primaria y una replicación en espera. El índice del clúster principal es el índice principal activo y maneja todas las solicitudes de escritura. Los índices replicados en un clúster secundario son índices secundarios de solo lectura.
Como cualquier sistema empresarial, necesita herramientas para proteger, administrar y monitorear su clúster de Elasticsearch. Las capacidades de seguridad, monitoreo y administración están integradas en Elasticsearch, lo que le permite usar Kibana como centro de control para administrar su clúster. Funciones como la agregación de datos y la gestión del ciclo de vida del índice le ayudan a gestionar sus datos de forma inteligente a lo largo del tiempo.