[Motor de búsqueda] Nivel de principio: Elasticsearch

Directorio de artículos

I. Introducción

ES tiene dos funciones:
1. Formado en ELK, utilizado para recopilar y procesar registros, registros de nginx, apache, message, secrue y mysql;
2. ES solo, utilizado como motor de búsqueda, especialmente para grandes volúmenes de datos, No es necesario que consulte la base de datos directamente. Solr también puede buscar en sitios web de comercio electrónico.

En segundo lugar, la introducción de ElasticSearch

2.1 Definición de ElasticSearch

Definición: Elasticsearch es un motor de análisis, búsqueda y almacenamiento distribuido en tiempo real.
Cinco palabras clave: tiempo real, distribuido, almacenamiento, búsqueda y análisis
Pregunta 1: ¿Cómo logra Elasticsearch el tiempo real?
Pregunta 2: La arquitectura de Elasticsearch se distribuye.
Pregunta 3: ¿Cómo almacena, busca y analiza Elasticsearch?

2.2 ElasticSearch reemplaza las necesidades reales de una base de datos como la búsqueda (tres razones)

¿Por qué usar Elasticsearch? La base de datos mysql también puede hacer en tiempo real (alta disponibilidad, implementación de lectura y escritura), almacenamiento (datos almacenados), búsqueda (como búsqueda), análisis (análisis de datos, el análisis específico varía de persona a persona)

La ventaja de ES radica en una consulta difusa eficiente (tenga en cuenta las dos palabras: consulta difusa eficiente), mysql también puede usar la palabra clave like y la consulta% difusa, pero este método tiene tres defectos:
Primero, baja eficiencia: like +% Este tipo de consulta no está indexada, lo que significa que mientras su base de datos tenga un gran volumen (100 millones de entradas), su consulta definitivamente estará en el segundo nivel; en
segundo lugar, no puede controlar la cantidad de datos y devolver una gran cantidad Datos: use like +% incluso si encuentra el registro correspondiente de la base de datos basado en la coincidencia aproximada, a menudo le devolverá una gran cantidad de datos. A menudo, la cantidad de datos que necesita no es tanta, tal vez 50 registros son suficientes;
En tercer lugar, es imposible buscar errores tipográficos: el contenido ingresado por los usuarios a menudo no es tan preciso. Por ejemplo, escribí ElastcSeach de Google (error tipográfico), pero Google todavía puede estimar que quiero escribir Elasticsearch.

Elasticsearch está especializado en búsquedas, que puede resolver tres problemas de búsqueda de mysql:
Primero, la velocidad de búsqueda es muy rápida: Elasticsearch es muy bueno en la búsqueda difusa.
Segundo, admite la clasificación de forma nativa: los datos buscados desde Elasticsearch se pueden filtrar según la puntuación. En parte, solo devuelva los usuarios con puntuaciones altas. En
tercer lugar, puede coincidir con registros relevantes: puede buscar resultados relevantes sin palabras clave tan precisas.

Tres, las características de ElasticSearch

3.1 ¿Por qué Elasticsearch puede lograr una "coincidencia aproximada" rápida o una "consulta de relevancia" rápida? Respuesta estándar: índice invertido + tokenizador

3.1.1 Índice invertido

Pregunta: ¿Por qué Elasticsearch puede lograr una "coincidencia aproximada" rápida o una "consulta de relevancia" rápida?
Respuesta estándar: tokenizador ES + índice invertido, explicación: tokenizer ES para realizar la segmentación de palabras al escribir datos en Elasticsearch. El índice invertido es encontrar la condición incompleta (correspondiente a posiciones 0-n) de la segmentación de palabras Posición y, a continuación, busque el registro.

Definición de índice de avance : buscar un registro de acuerdo con la "condición completa" se denomina índice de avance;
expresión de función : es decir, dado que x es solo para el único que determina el valor de y;
actual : como la lista de capítulos de un libro es de avance Índice, busque un número de página único a través de la tabla de contenido.
Definición de índice invertido : busque el registro correspondiente de acuerdo con una determinada palabra (condición incompleta), llamado índice invertido;
representación de la función : es decir, el valor de y dado tiene valores de x correspondientes 0-n, ES se basa en el índice invertido Find;
Actual : Si solo abre una página en un libro, ES registrará cada palabra y la posición correspondiente de cada palabra, y ES encontrará su directorio correspondiente de acuerdo con cada palabra, como algoritmo-> 2,13,42,56 , Explicación: La palabra "algoritmo" debe haber aparecido en la página 2, página 13, página 42 y página 56.
ES usa tokenizador + índice invertido
Mire la siguiente imagen nuevamente para probarla:

3.1.2 tokenizador

Pregunta: ¿Cómo se da cuenta ES de la segmentación del lenguaje humano (chino, inglés, ruso, etc.)?
Respuesta estándar: esta pregunta no es clara. Debe tenerse en cuenta que ES no completa la función de segmentación de palabras. ES es una biblioteca de índices y un motor de búsqueda que almacena la segmentación de palabras y las posiciones de segmentación de palabras. No logra la segmentación de palabras. ES usa un segmentador de palabras incorporado para segmentar palabras. La función de se entrega al tokenizador para completar, los tokenizadores de uso común son:
Standard Analyzer: segmentar por palabras, palabras en minúsculas
Analizador simple: filtrar por no letras (los símbolos se filtran), palabras en minúsculas
WhitespaceAnalyzer: segmentar por espacios, Sin minúsculas

ps: Elasticsearch está escrito por extranjeros. Los tokenizadores integrados están todos en inglés. Cuando nuestros usuarios buscan, a menudo buscan chino. Ahora, el tokenizador chino más utilizado es el tokenizador IK.

En cuanto a cómo el tokenizador utiliza internamente algoritmos para lograr la segmentación de texto del lenguaje humano, esto no es una discusión.
Lo que debe saber es que el motor de búsqueda es solo una biblioteca de índices, que almacena la segmentación de palabras y las posiciones de segmentación de palabras, no la segmentación de palabras específica, sino el segmentador de palabras, que es el caso de ES y Solr.

El tokenizador de Elasticsearch se compone principalmente de tres partes:
Filtros de caracteres (filtro de texto para eliminar HTML)
Tokenizer (reglas de segmentación, como: segmentación de palabras, filtro sin letras y segmentación de espacios)
TokenFilter (palabra segmentada Procesamiento, como convertir a minúsculas o no convertir a minúsculas)

3.2 Estructura de datos de Elasticsearch (índice de términos, diccionario de términos, lista de publicaciones)

La estructura de datos de Elasticsearch a las
diferentes estructuras de datos a menudo no es lo mismo que cuando desea encontrarla para ser rápido, necesita tener soporte para la estructura de datos subyacente:
primero, para encontrar la complejidad de tiempo de una lista vinculada es generalmente O (n)
primero En segundo lugar, continúe con lo anterior, la complejidad del tiempo de búsqueda del árbol es generalmente O (logn), que es mejor que la lista vinculada. En
tercer lugar, continúe con lo anterior, la complejidad del tiempo de búsqueda de la tabla hash es generalmente O (1), que es mejor que el árbol.
En cuanto a la falta de claridad de Elasticsearch La velocidad de consulta es muy rápida. La estructura de datos subyacente de Elasticsearch es: Índice de términos, Diccionario de términos, Lista de publicaciones

Estructura de datos de Elasticsearch (Índice de términos, Diccionario de términos, Lista de publicaciones)
como se muestra en la figura:
Inserte la descripción de la imagen aquí
Explique los tres conceptos en la figura anterior (Índice de términos, Diccionario de términos, Lista de publicaciones).
Definición de diccionario de términos: Para almacenar la segmentación de palabras , ingresamos un párrafo de texto, y Elasticsearch nos tratará de acuerdo con el segmentador de palabras Segmentación de palabras del texto (es decir, Ada / Allen / Sara ... como se ve en la imagen). Estas subpalabras se denominan colectivamente Diccionario de términos. Dado que hay muchísimas palabras en el Diccionario de términos, Está ordenado. Cuando desee encontrarlo, puede verificarlo por división binaria. No es necesario recorrer toda la
definición de PostingList del diccionario de términos: almacene la posición de segmentación de palabras , y necesitamos encontrar el registro correspondiente a través de la segmentación de palabras. Estos ID de documentos se almacenan en la
definición del índice de términos de PostingList : almacenamiento El prefijo de segmentación de palabras se almacena en la memoria . Debido a que hay demasiadas palabras en el Diccionario de términos, es imposible almacenar todas las palabras en el Diccionario de términos en la memoria, por lo que Elasticsearch también extrajo una capa llamada Índice de términos, que solo almacena algunas palabras Prefijo, el índice de término se almacenará en la memoria (la recuperación será muy rápida)

3.3 Optimización del índice de términos + Optimización del diccionario de términos + Optimización de PostingList

3.3.1 Optimización del índice de plazos

Optimización del índice de término: utilizando el formulario de almacenamiento FST El
índice de término se almacena en la memoria en forma de FST (transductores de estado finito), que se caracteriza por un gran ahorro de memoria. FST tiene dos ventajas:
1) Tamaño reducido. Mediante el uso repetido de la palabra prefijo y sufijo en el diccionario, el espacio de almacenamiento se comprime;
2) La velocidad de consulta es rápida. O (len (str)) complejidad del tiempo de consulta.

Optimización del índice de términos (tres)
Primero, el índice de términos se almacena en la memoria;
segundo , el índice de términos se almacena en forma de FST (transductores de estado finito) (ahorrando espacio en la memoria).
En tercer lugar, el Diccionario de términos también está ordenado por Índice de términos (conveniente para buscar)

Gold finger: Para Term Index, para garantizar que sea lo suficientemente rápido, Term Index se almacena en la memoria. Dado que se almacena en la memoria, es fácil reducir el espacio ocupado. Por lo tanto, la optimización de Term Index es principalmente utilizar el formato de almacenamiento FST, a través del diccionario El uso repetido de prefijo y sufijo de palabra en el medio, espacio de almacenamiento comprimido, la segunda optimización es usar el formulario de almacenamiento FST, complejidad del tiempo de consulta O (len (str))

3.3.2 Optimización del diccionario de términos

Truco: La optimización del Diccionario de términos se refleja principalmente en el rendimiento de la búsqueda, que consiste en utilizar la búsqueda binaria.

3.3.3 Optimización del índice de plazos

Optimización de PostingList: use la tecnología de codificación FOR para comprimir los datos dentro + use Roaring Bitmaps para realizar la operación de intersección en la ID del documento,
use la tecnología de codificación FOR para comprimir los datos dentro de
PostingList usará la tecnología de codificación Frame Of Reference (FOR) en los datos dentro Realice la compresión para ahorrar espacio en disco.
Inserte la descripción de la imagen aquí
Para la explicación de la figura anterior:
PostingList usa Roaring Bitmaps para realizar operaciones de intersección en ID de documentos.
PostingList almacena ID de documentos. Cuando verificamos, a menudo necesitamos realizar operaciones de intersección y unión en estas ID de documentos (por ejemplo, en consultas de múltiples condiciones Time), PostingList usa Roaring Bitmaps para realizar la operación de intersección en el ID del documento.La ventaja de usar Roaring Bitmaps es que puede ahorrar espacio y obtener rápidamente el resultado de la intersección.
Inserte la descripción de la imagen aquí
Para la explicación de la figura anterior:
Paso 1: Quite 65536 de cada número, registre el resultado y tome el módulo de 65536 para cada número. El resultado del registro
1000 se convierte en (0,1000), lo que significa que el número 1000 dividido por 65536 es 0, y el resultado del módulo es 1000
62101 se convierte en (0,62101), lo que significa que el número 62101 dividido por 65526 ​​da como resultado 0, y el resultado del módulo es 65536,
y así sucesivamente. Después del Paso 1, 6 números se convierten en 6 pares clave-valor (clave, valor) y No hay ahorro en el tamaño de almacenamiento, y observe el Paso
2 Paso 2: Para los 6 pares clave-valor anteriores, divida según el resultado de dividir por 65536, por lo que
1000 y 62101 son un grupo, y el resultado de dividirlos entre 65526 ​​es 0 y el módulo de almacenamiento 65536. Entonces, almacene 1000 y 62101
131385, 132052 y 191173 son un grupo. El resultado de dividirlos por 65526 ​​es 2, y el almacenamiento es módulo 65536. Por lo tanto, almacenar 313, 980, 60101 y
196658 es un grupo. El resultado de dividirlos por 65526 ​​es 3, y el almacenamiento es módulo 65536. Entonces, almacenar 50
A partir de los resultados del almacenamiento, el almacenamiento se vuelve más pequeño.
Paso 3: Utilice el tipo de datos más pequeño posible para almacenar

Truco: La lista de publicaciones se usa para almacenar la ubicación del Diccionario de términos, la optimización incluye dos:
Primero, dado que es para almacenar la ubicación del Diccionario de términos, debemos saber cómo hacer que el espacio ocupado sea lo más pequeño posible y usar la tecnología de codificación FOR para comprimir los datos dentro. ; En
segundo lugar, dado que está almacenando la ubicación del Diccionario de términos, es necesario volver rápidamente al rango de ID. PostingList usa Roaring Bitmaps para realizar la operación de intersección en el ID del documento

3.3.4 Resumen: Comprender la optimización de la estructura de datos de ES (¿por qué la búsqueda en la base de datos de índices de ES es rápida? Está determinada por la estructura de datos de ES)

¿Por qué la búsqueda de la biblioteca de índices de ES es rápida? Está determinada por la estructura de datos de ES. De acuerdo con la estructura de datos de ES, existen métodos
de optimización Optimización de índice de término + Optimización de diccionario de término + Optimización de PostingList

Gold finger: Para Term Index, para garantizar que sea lo suficientemente rápido, Term Index se almacena en la memoria. Dado que se almacena en la memoria, es fácil reducir el espacio ocupado. Por lo tanto, la optimización de Term Index es principalmente utilizar el formato de almacenamiento FST, a través del diccionario El uso repetido de prefijo y sufijo de palabra en el medio, espacio de almacenamiento comprimido, la segunda optimización es usar el formulario de almacenamiento FST, complejidad del tiempo de consulta O (len (str))

Truco: La optimización del Diccionario de términos se refleja principalmente en el rendimiento de la búsqueda, que consiste en utilizar la búsqueda binaria.

Truco: La lista de publicaciones se usa para almacenar la ubicación del Diccionario de términos, la optimización incluye dos:
Primero, dado que es para almacenar la ubicación del Diccionario de términos, debemos saber cómo hacer que el espacio ocupado sea lo más pequeño posible y usar la tecnología de codificación FOR para comprimir los datos dentro. ; En
segundo lugar, dado que está almacenando la ubicación del Diccionario de términos, es necesario volver rápidamente al rango de ID. PostingList usa Roaring Bitmaps para realizar la operación de intersección en el ID del documento

3.4 El concepto y la arquitectura de Elasticsearch (la terminología y la arquitectura están vinculadas)

3.4.1 Conceptos en ES

El concepto de
Elasticsearch Index: Elasticsearch Index es equivalente al
tipo de tabla de la base de datos : esto ha sido abolido en la nueva versión de Elasticsearch (en la versión anterior de Elasticsearch, un índice admite múltiples tipos, un poco similar a una cola de mensajes con múltiples grupos bajo un tema El concepto)
Documento: Documento es equivalente a una fila de registros
en la base de datos Campo: el concepto de Columna equivalente a la base de datos
Mapeo: El concepto de Esquema
equivalente a la base de datos DSL: SQL equivalente a la base de datos (la API para que podamos leer los datos de Elasticsearch)
Inserte la descripción de la imagen aquí

3.4.2 Arquitectura ES

Arquitectura ES: Elasticsearch es el almacenamiento distribuido número uno
. Nodos distribuidos (Master + Slave) : Un clúster de Elasticsearch tendrá múltiples nodos de Elasticsearch. Los llamados nodos son en realidad máquinas que ejecutan procesos de Elasticsearch. Entre los muchos nodos, habrá un nodo maestro, que es el principal responsable de mantener los metadatos del índice, cambiar la identidad de los fragmentos primarios y los fragmentos de réplica, etc. (el concepto de fragmentación se analizará más adelante). Si el nodo principal deja de funcionar, Se elegirá un nuevo nodo maestro.
En segundo lugar, la fragmentación : la capa más externa de Elasticsearch es Index (equivalente al concepto de una tabla de base de datos), podemos distribuir los datos de un Index a diferentes Nodos para su almacenamiento, esta operación se llama fragmentación. Por ejemplo, hay 4 nodos en el clúster. Ahora tengo un índice. Si quiero almacenar este índice en 4 nodos, podemos configurarlo en 4 fragmentos. Los datos de estos 4 fragmentos son los datos del
tercer índice . El motivo del almacenamiento de fragmentos
(1) Si la cantidad de datos en un índice es demasiado grande y solo hay un fragmento, solo se almacenará en un nodo. Con la cantidad de datos Con el crecimiento, es posible que un nodo no pueda almacenar un índice.
(2) Se pueden operar varios fragmentos en paralelo al escribir o consultar (leer y escribir datos de cada nodo para mejorar el rendimiento).
Cuarto, los fragmentos logran una alta disponibilidad: si un nodo está inactivo, esa parte ¿Se pierden los datos?
En Elasticsearch, los fragmentos se dividirán en fragmentos primarios y fragmentos de réplica (para lograr una alta disponibilidad). Cuando se escriben los datos, se escriben en el fragmento principal. Los fragmentos de réplica copiarán los datos del fragmento principal. Se pueden leer tanto los fragmentos primarios como los de réplica.
El número de fragmentos primarios y de réplica en los que se debe dividir el índice se puede establecer por configuración.
Si un nodo deja de funcionar, el nodo principal elevado anteriormente promoverá el fragmento de réplica correspondiente al fragmento principal, de modo que incluso Cuelgue, los datos no se perderán.

Cuatro, ES leer y escribir

4.1 Proceso de escritura de Elasticsearch (principalmente la estructura interna de ES)

Proceso de escritura de Elasticsearch Como
ya sabemos anteriormente, cuando escribimos datos en Elasticsearch, se escriben en el fragmento principal. Podemos obtener más detalles.
El cliente escribe una parte de los datos y el nodo maneja la solicitud en el clúster de Elasticsearch:
Inserte la descripción de la imagen aquí
cada nodo del clúster es un nodo de coordinación y el nodo de coordinación indica que este nodo puede realizar el enrutamiento. Por ejemplo, el nodo 1 recibe la solicitud, pero encuentra que los datos solicitados deben ser procesados ​​por el nodo 2 (porque el fragmento principal está en el nodo 2), por lo que enviará la solicitud al nodo 2.

El nodo de coordenadas puede calcular en qué
fragmento primario se encuentra a través del algoritmo hash y luego enrutar al fragmento de nodo correspondiente = hash (document_id)% (num_of_primary_shards)

Al enrutar al nodo correspondiente y al fragmento principal correspondiente, se realizarán las siguientes acciones (la descripción del texto corresponde a la imagen):
(1) Escriba los datos en el área del búfer de memoria
(2) Luego escriba los datos en el área del búfer de translog
(3) Cada Después de 1 segundo, los datos se actualizan desde el búfer al FileSystemCache para generar el archivo de segmento. Una vez que se genera el archivo de segmento, se puede consultar a través del índice
(4) Después de que se completa la actualización, el búfer de memoria se vacía.
(5) Cada 5 s, el translog se descarga del búfer al disco
(6) Periódicamente / cuantitativamente desde FileSystemCache, combinado con el índice de flujo del contenido del translog al disco.
Inserte la descripción de la imagen aquí
Para la explicación de la figura anterior:
(1) Elasticsearch escribirá los datos en el búfer de memoria primero y luego los actualizará en el área de caché del sistema de archivos cada 1 s (cuando los datos se vacían en el búfer del sistema de archivos, los datos se pueden recuperar). Por lo tanto: los datos escritos por Elasticsearch necesitan 1s para ser consultados
(2) Para evitar el tiempo de inactividad del nodo y la pérdida de datos en la memoria, Elasticsearch escribirá otra copia de los datos en el archivo de registro, pero inicialmente se escribe en el búfer de memoria. El búfer se vaciará en el disco cada 5 segundos. Por lo tanto: si un nodo de Elasticsearch deja de funcionar, es posible que se pierdan 5 segundos de datos.
(3) Cuando el archivo translog en el disco es lo suficientemente grande o más de 30 minutos, se activará la operación de confirmación y el archivo de segmento en la memoria se descargará de forma asincrónica en el disco para completar la operación de persistencia.
resumen: Escriba en el búfer de memoria (genere segmento y translogue regularmente) para permitir que los datos se indexen y persistan. Finalmente, una persistencia se completa con la confirmación. Una vez que se escribe el fragmento principal, los datos se enviarán al nodo del conjunto de réplicas en paralelo y, cuando todos los nodos se escriban correctamente, el ack se devuelve al nodo coordinador y el nodo coordinador devuelve un ack al cliente para completar una escritura.

4.2 Actualización y eliminación de Elasticsearch (operación de escritura)

Elasticsearch actualiza y elimina el
proceso de operación de actualización y eliminación de Elasticsearch:

Paso 1: Marque el registro de documento correspondiente con .del;
Paso 2: Si es una operación de eliminación, marque el estado de eliminación;
Paso 3: Si es una operación de actualización, marque el documento original como eliminar, y luego escriba uno nuevo Datos (actualizar = eliminar primero y luego insertar); el
mismo punto: al actualizar y eliminar, el estado del documento se marca como el estado de eliminación

Para ES, como se mencionó anteriormente, se generará un archivo de segmento cada 1s, y habrá más y más archivos de segmento. Elasticsearch tendrá una tarea de combinación que combinará varios archivos de segmento en un archivo de segmento. Durante el proceso de fusión, el documento con el estado de eliminación se eliminará físicamente y se completará la eliminación física.

4.3 Dos métodos de consulta de Elasticsearch (operaciones de lectura: Get, Query / Search)

La consulta de
consulta de Elasticsearch se puede dividir en dos formas más simples:
(1) documento de consulta basado en el ID; código: documento de documento público (int docID);
(2) documento de coincidencia de consulta basado en la consulta (término de búsqueda); código: público Búsqueda de TopDocs (consulta de consulta, int n); documento de documento público (int docID);

La primera consulta Obtener : El proceso de consultar un documento específico basado en el ID es: el
primer paso es recuperar el archivo Translog en la memoria; el
segundo paso es recuperar el archivo Translog en el disco duro; el
tercer paso es recuperar el archivo de segmento en el disco duro.
El segundo tipo de consulta Búsqueda / Consulta : El proceso de hacer coincidir el documento según la consulta es:
consultar los archivos de segmento en la memoria y el disco duro al mismo tiempo
. Resumen de una imagen Dos consultas
Inserte la descripción de la imagen aquí

Dos métodos de consulta: Obtener (comprobar Doc por ID es en tiempo real), Consultar / Buscar (hacer coincidir Doc por consulta es casi en tiempo real),
pregunta: ¿Por qué Obtener en tiempo real y Consulta / Buscar es casi en tiempo real?
Motivo: porque el archivo de segmento solo se genera cada segundo.

La consulta de Elasticsearch se puede dividir en tres etapas:

La primera etapa: QUERY_AND_FETCH (devuelve todo el contenido del documento después de que se complete la consulta)
Segunda etapa: QUERY_THEN_FETCH (primero consulta el ID del documento correspondiente y luego haz coincidir el documento correspondiente de acuerdo con el ID del documento)
Tercera etapa: DFS_QUERY_THEN_FETCH (primero cuenta la puntuación, luego Preguntar)

"El" punto "aquí se refiere a la frecuencia de palabras y documentos (Frecuencia de términos, Frecuencia de documentos). Como todos sabemos, cuanto mayor es la frecuencia, más fuerte es la correlación".
Inserte la descripción de la imagen aquí
Pd: Generalmente, usamos QUERY_THEN_FETCH más, la primera consulta Devolver todo el contenido del documento (QUERY_AND_FETCH) solo es adecuado para solicitudes que solo necesitan verificar un segmento.

El flujo de proceso general de QUERY_THEN_FETCH es aproximadamente :

(1) La solicitud del cliente se envía a un nodo del clúster. Cada nodo del clúster es un nodo de coordenadas (
2) Luego, el nodo coordinador reenvía la solicitud de búsqueda a todos los fragmentos (tanto el fragmento principal como el fragmento de réplica)
(3) Cada fragmento se buscará por sí mismo El resultado de salida (doc id) se devuelve al nodo de coordinación, y el nodo de coordinación realiza operaciones como la combinación de datos, la clasificación y la paginación para producir el resultado final.
(4) Luego, el nodo de coordinación extrae los datos del documento real de cada nodo de acuerdo con el identificador del documento y finalmente los devuelve al cliente.

Qué hace el nodo durante la fase de consulta :

(1) El nodo de coordinación envía el comando de consulta al fragmento de destino (reenviando la solicitud al fragmento principal o al fragmento de réplica)
(2) El nodo de datos (filtrado, ordenación, etc. de dos en cada fragmento) y devuelve el ID de documento a Nodo de coordinación

Qué hace el nodo durante la fase de recuperación :

(1) El nodo de coordinación obtiene el doc id devuelto por el nodo de datos, agrega estos doc ids y luego envía los fragmentos de datos de destino para capturar comandos (espere obtener el registro de Doc completo)
(2) El nodo de datos presiona el doc id enviado por el nodo de coordinación , Extraiga los datos realmente necesarios y devuélvalos al nodo de coordinación

Resumen: Proceso principal interno de ES: dado que Elasticsearch se distribuye, necesita extraer los datos correspondientes de cada nodo y, finalmente, la síntesis unificada al cliente (ps: solo Elasticsearch hace todas estas tareas, cuando lo usamos Solo sin percepción)

Cinco, trampas de entrevistas

Ligeramente, se debe recordar el texto completo.

Para ordenar el texto completo, ES tiene dos funciones. Primero, busque registros en el registro de recopilación combinado de ELK; segundo, use ES para buscar datos comerciales específicos

Primero, la definición de ElasticSearch + ElasticSearch reemplaza la demanda real de una base de datos como la búsqueda (tres razones)

En segundo lugar, ¿por qué Elasticsearch puede lograr una "coincidencia aproximada" rápida o una "consulta de relevancia" rápida? Respuesta estándar: índice invertido + tokenizador

En tercer lugar, la estructura de datos de Elasticsearch (Índice de términos, Diccionario de términos, PostingList) + optimización interna de la estructura de datos (optimización de TermIndex + optimización de PostingList)
3.1 ¿Por qué la biblioteca de índices de ES busca rápidamente? Está determinada por la estructura de datos de ES y corresponde a los datos de ES Estructura, existen métodos
de optimización Optimización del índice de términos + optimización del diccionario de términos + optimización de la lista de publicaciones
3.2 Golden Finger: Para el índice de términos, para asegurarse de que sea lo suficientemente rápido, el índice de términos se almacena en la memoria. Dado que se almacena en la memoria, es mejor reducir el espacio ocupado Por lo tanto, la optimización de Term Index consiste principalmente en utilizar el formato de almacenamiento FST. Mediante el uso repetido de la palabra prefijo y sufijo en el diccionario, el espacio de almacenamiento se comprime. La segunda optimización es utilizar el formato de almacenamiento FST, O (len (str) ) Complejidad del tiempo de consulta
3.3 Golden Finger: Término La optimización del diccionario se refleja principalmente en el rendimiento de la búsqueda, que consiste en utilizar la búsqueda binaria.
3.4 Trucos: la lista de publicaciones se utiliza para almacenar la ubicación del diccionario de términos, la optimización incluye dos:

3.4.1 Dado que es para almacenar la ubicación del Diccionario de términos, debemos saber cómo hacer que el espacio ocupado sea lo más pequeño posible y usar la tecnología de codificación FOR para comprimir los datos en su interior;
3.4.2 Dado que es para almacenar la ubicación del Diccionario de términos, debemos poder volver rápidamente al rango de ID, PostingList usa Roaring Bitmaps para realizar operaciones de intersección en ID de documentos

Cuarto, el concepto y la arquitectura de Elasticsearch (la terminología y la arquitectura están vinculadas)

En quinto lugar, la estructura interna de ES + el proceso de lectura y escritura de ES (lectura es consulta, incluidos dos métodos; escritura incluye actualización y eliminación)
5.1 Proceso de escritura de Elasticsearch (principalmente estructura interna de ES)
5.2 Actualización y eliminación de Elasticsearch (operación de escritura)
5.3 Dos métodos de consulta de Elasticsearch (operaciones de lectura: Get, Query / Search)

Seis, resumen

Nivel de principio: Elasticsearch, hecho.

¡Codifique todos los días, progrese todos los días! ! !

Supongo que te gusta

Origin blog.csdn.net/qq_36963950/article/details/108952827
Recomendado
Clasificación