Guía de optimización del índice Elasticsearch: fragmentación, copia, mapeo y analizador

Elasticsearch es un motor de búsqueda distribuido de código abierto con almacenamiento de datos y velocidad de consulta muy rápidos. Sin embargo, frente a conjuntos de datos a gran escala y un alto acceso concurrente, el rendimiento de Elasticsearch también puede verse afectado. Para maximizar el rendimiento de Elasticsearch, necesitamos optimizar el índice. Este blog presentará varios aspectos clave de la optimización del índice Elasticsearch, incluido el ajuste de la fragmentación y las réplicas, el uso de mapeo y analizador, etc.

1. Fragmentos y réplicas

Elasticsearch utiliza fragmentos y réplicas para lograr almacenamiento distribuido y alta disponibilidad. La fragmentación consiste en dividir el índice en varias partes, cada parte es un índice de Lucene independiente. Una copia es una copia de seguridad de un fragmento y cada fragmento puede tener varias copias.

De forma predeterminada, Elasticsearch creará 5 fragmentos primarios y 1 réplica para cada índice, para un total de 10 fragmentos (5 fragmentos primarios + 5 fragmentos de réplica). Esto significa que los datos de cada índice se dividirán en 10 partes y cada parte tendrá un fragmento principal y un fragmento de réplica. Esta configuración es suficiente para índices de pequeña escala, pero es posible que debamos ajustarla cuando nos enfrentamos a conjuntos de datos de gran escala.

1.1 Ajustar la cantidad de fragmentos primarios

La configuración del número de fragmentos primarios afectará directamente el rendimiento distribuido y la escalabilidad del índice. Si la cantidad de fragmentos primarios es demasiado pequeña, la cantidad de datos en cada fragmento será demasiado grande y no se podrán utilizar los recursos informáticos de todos los nodos del clúster. Si la cantidad de fragmentos primarios es demasiado grande, el índice estará demasiado disperso, lo que generará la carga de la migración y el ajuste de datos.

En términos generales, podemos ajustar la cantidad de fragmentos primarios de las dos maneras siguientes:

  • Especifique la cantidad de fragmentos primarios al crear un nuevo índice;
  • Reindexar (reindexar) el índice existente y especificar el número de nuevos fragmentos primarios.

En la operación real, necesitamos ajustar la cantidad de fragmentos primarios de acuerdo con factores como el volumen de datos, la frecuencia de las consultas y el tamaño del clúster. Por ejemplo, para un clúster con 8 núcleos de CPU por nodo, generalmente se recomienda establecer el número de fragmentos primarios en una potencia de 2 (2, 4, 8, 16, etc.).

1.2 Ajustar el número de copias

La configuración del número de réplicas afectará la disponibilidad y el rendimiento de lectura y escritura del índice. Si la cantidad de réplicas es demasiado pequeña, no se puede garantizar la disponibilidad de los datos cuando falla un nodo. Si hay demasiadas copias, se ocupará demasiado espacio en disco y ancho de banda de la red, lo que reducirá el rendimiento de escritura.

En términos generales, podemos ajustar el número de réplicas de las dos formas siguientes:

  • Especifique el número de réplicas al crear el índice;
  • Realice operaciones API en un índice existente para cambiar la cantidad de réplicas.

A diferencia de la cantidad de fragmentos primarios, la cantidad de réplicas se puede ajustar dinámicamente según las necesidades reales. Por ejemplo, para índices con alta frecuencia de escritura, podemos reducir la cantidad de réplicas para mejorar el rendimiento de escritura. Para índices con alta frecuencia de consultas, podemos aumentar la cantidad de réplicas para mejorar el rendimiento de las consultas.

2. Mapeo

En Elasticsearch, Mapping es el proceso de mapear campos de documentos a estructuras de datos en el índice. El mapeo define información como el tipo, tokenizador y método de almacenamiento de cada campo en el índice, lo cual es muy importante para las operaciones de búsqueda y agregación. Al optimizar el mapeo, podemos mejorar el rendimiento de las consultas y la agregación y reducir el espacio de almacenamiento del índice.

2.1 Borrar tipo de campo

Al definir Mapping, debemos ser lo más claros posible sobre el tipo de cada campo. Los tipos de campos admitidos por Elasticsearch incluyen:

  • cadena (texto, palabra clave);
  • 数值(largo、entero、corto、byte、doble、flotante、half_float、scaled_float);
  • fecha (fecha);
  • booleano (booleano);
  • binario (binario);
  • Ubicación geográfica (geo_punto, geo_forma).

Al seleccionar un tipo de campo, debemos elegir según el significado real del campo y el escenario de uso. Por ejemplo, para un campo de texto que requiere una búsqueda de texto completo, generalmente se usa el tipo de texto. Para los campos de texto que requieren una concordancia exacta, generalmente se usa el tipo de palabra clave. Además, para los campos numéricos, también debemos prestar atención a si es necesario agregar los campos, porque los diferentes tipos de campos tienen diferentes rendimientos durante la agregación.

2.2 Evite utilizar el Mapeo predeterminado

Elasticsearch proporciona un Mapeo predeterminado, que asigna automáticamente todos los campos no definidos en el documento al tipo de texto. Sin embargo, el uso de la asignación predeterminada dará como resultado un desperdicio de espacio de almacenamiento para índices y un rendimiento de consulta degradado. Por tanto, a la hora de definir Mapping, debemos ser lo más claros posible sobre el tipo de cada campo y evitar utilizar el Mapping predeterminado.

2.3 Uso de datos de campo

Field Data es una estructura de datos para operaciones de agregación en Elasticsearch, que puede cargar los valores de los campos del documento en la memoria, mejorando así el rendimiento de las operaciones de agregación. Al utilizar datos de campo, debemos prestar atención a los siguientes puntos:

  • Los datos de campo solo se aplican a campos inmutables;
  • Los datos de campo ocupan memoria, por lo que debe prestar atención al uso de la memoria al elegir utilizar datos de campo;
  • Field Data tiene un rendimiento deficiente para campos de alta cardinalidad.

2.4 Usar campos anidados

Elasticsearch admite campos anidados, es decir, anidar un documento dentro de otro. El uso de campos anidados simplifica las operaciones de consulta y agregación y mejora el rendimiento de las consultas. Al utilizar campos anidados, debemos prestar atención a los siguientes puntos:

  • La definición de campos anidados debe realizarse en Mapping;
  • Los campos anidados no se pueden buscar directamente en texto completo;
  • Cuando utilice campos anidados para operaciones de agregación, debe utilizar agregación anidada (agregación anidada).

3. analizador

El analizador es un componente utilizado para procesar texto en Elasticsearch, puede dividir el texto en una serie de términos (términos) y almacenar estos términos en el índice. El analizador consta de tres componentes: filtro de caracteres, tokenizador y filtro de tokens.

3.1 Filtro de caracteres

Los filtros de caracteres se utilizan para preprocesar el texto, como eliminar etiquetas HTML, convertir caracteres especiales, etc. Elasticsearch proporciona algunos filtros de caracteres integrados, como el filtro de caracteres de tira HTML, el filtro de caracteres de mapeo, etc.

3.2 Tokenizador

Los tokenizadores se utilizan para segmentar texto en una secuencia de tokens. Elasticsearch proporciona una variedad de tokenizadores integrados, como Standard Tokenizer, Whitespace Tokenizer, Keyword Tokenizer, etc. Además, también podemos implementar tokenizadores personalizados a través de complementos personalizados.

3.3 Filtros de términos

El término filtro se utiliza para filtrar, modificar o reemplazar el término segmentado por palabras. Elasticsearch proporciona una variedad de filtros de términos integrados, como el filtro de tokens en minúsculas, el filtro de tokens de parada, el filtro de tokens de sinónimos, etc. Además, también podemos implementar filtros de términos personalizados a través de complementos personalizados.

3.4 Optimización del analizador

Al utilizar Analyzer, debemos prestar atención a los siguientes puntos:

  • Minimizar la cantidad de filtros de caracteres y filtros de términos, ya que aumentan el tiempo de procesamiento;
  • Seleccione el tokenizador y el filtro de términos adecuados según las necesidades reales;
  • Al realizar una búsqueda de texto completo, debe utilizar el mismo analizador que al indexar.

epílogo

Al optimizar el índice de Elasticsearch, podemos mejorar el rendimiento de la búsqueda y la agregación y reducir el espacio de almacenamiento ocupado. Aunque optimizar el índice requiere ciertas habilidades y experiencia, siempre que domine los conocimientos relevantes, podrá proporcionar servicios de búsqueda y análisis más eficientes para su negocio.

Supongo que te gusta

Origin blog.csdn.net/bairo007/article/details/132019575
Recomendado
Clasificación