Tipo de campo de cambio de reindex de ElasticSearch

Tipo de campo de cambio de reindex de ElasticSearch

Trabajar con bases de datos es muy divertido, pero a veces puede ser un desafío, especialmente cuando se trata de datos ya existentes.

Por ejemplo, si desea cambiar el tipo de campo específico, puede requerir que retire el servicio, lo que puede tener repercusiones graves, especialmente en servicios que procesan grandes cantidades de datos.

Afortunadamente, podemos usar las potentes características de Elasticsearch, como reintegrar, ingerir nodos, tuberías y procesadores para facilitar las tareas.

Este tutorial le mostrará cómo cambiar un tipo de campo en un índice específico a otro, utilizando nodos de ingest de ElasticSearch. El uso de este enfoque eliminará el tiempo de inactividad que afecte a los servicios mientras se las arregla para realizar las tareas de cambio de tipo de campo.

Introducción a los nodos de ingestas

El nodo Ingest de ElasticSearch le permite preprocesar documentos antes de su indexación.

Un nodo Elasticsearch es una instancia específica de ElasticSearch; Los nodos conectados (más de uno) hacen un solo clúster.

Puede ver los nodos disponibles en el clúster en ejecución con la solicitud:

Obtener /_nodes /

El comando curl para esto es:

curl -xget "http: // localhost: 9200/_nodes/"

Ejecución de este comando debe brindarle información masiva sobre los nodos, como se muestra a continuación (salida truncada):


"_nodes":
"Total": 3,
"exitoso": 3,
"Falló": 0
,
"cluster_name": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"nodos":
"GSLMJTKYTEMOOX-EO7EM4W":
"Nombre": "Instancia-0000000003",
"Transport_address": "172.28.86.133: 19925 ",
"Anfitrión": "172.28.86.133 ",
"IP": "172.28.86.133 ",
"Versión": "7.10.2 ",
"build_flavor": "predeterminado",
"build_type": "Docker",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"Total_indexing_buffer": 214748364,
"Roles": [
"datos",
"data_cold",
"data_content",
"data_hot",
"data_warm",
"ingerir",
"maestro",
"Remote_cluster_client",
"transformar"
],
"Atributos":
"Logical_availability_zone": "Zone-0",
"server_name": "instancia-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
"Disponibilidad_zone": "US-West-1c",
"Xpack.instalado ":" verdadero ",
"instance_configuration": "AWS.datos.high.i3 ",
"transformar.nodo ":" verdadero ",
"Región": "US-West-1"
,
"ajustes" :
"S3":
"cliente" :
"elástico-internal-22e0be":
"Endpoint": "S3-Us-West-1.amazonaws.com "


,
--------------------------------salida truncada---------------------

Por defecto, todos los nodos Elasticsearch habilitan la ingesta y son capaces de manejar las operaciones de ingesta. Sin embargo, para las operaciones de ingestas pesadas, puede crear un solo nodo dedicado a ingerir solo.

Para manejar pre_process, antes de indexar los documentos, necesitamos definir una tubería que establezca la serie de preprocesadores.

Los preprocesadores son conjuntos de instrucciones envueltas alrededor de una tubería y se ejecutan una a la vez.

La siguiente es la sintaxis general de cómo definir una tubería:


"Descripción": "Convirterme",
"procesadores": [
"convertir" :
"Campo": "ID",
"Tipo": "Integer"
]

La propiedad de la descripción dice lo que debe lograr la tubería. El siguiente parámetro son los preprocesadores, transmitidos como una lista en el orden de su ejecución.

Crear una tubería de conversión

Para crear una tubería que usemos para convertir un tipo, use la solicitud PUT con el punto final de la API _ingest como:

Poner _ingest/Pipeline/Convert_Pipeline

"Descripción": "Convierte el campo Dayofweek de campo a un largo desde el entero",
"procesadores": [

"convertir" :
"Campo": "Dayofweek",
"Tipo": "largo"


]

Para curl, use el comando:

curl -xput "http: // localhost: 9200/_ingest/tupeline/convert_pipeline" -h 'content -type: application/json' -d '"descripción": "Convierte el campo Dayofweek a un largo de un entero", ",", ",", ",". Procesadores ": [" Convertir ": " campo ":" dayofweek "," tipo ":" largo "] '

Reindex y convertir Tipo

Una vez que tenemos la tubería en el nodo de ingesta, todo lo que debemos hacer es llamar a la API de indexación y pasar la tubería como argumento en el Dest del cuerpo de solicitud como:

Publicar _reindex

"fuente":
"índice": "kibana_sample_data_flights"
,
"Dest":
"índice": "kibana_sample_type_diff",
"Pipeline": "Convert_Pipeline"

Para curl:

curl -xpost "http: // localhost: 9200/_reindex" -h 'content -type: application/json' -d '"fuente": "index": "kibana_sample_data_flights", "des": "índice ":" kibana_sample_type_diff "," Pipeline ":" Convert_Pipeline " '

Verificar la conversión

Para verificar que la tubería se haya aplicado correctamente, use la solicitud GET para obtener ese campo específico como:

Get/kibana_sample_data_flights/_mapping/field/dayofweek
Get/kibana_sample_type_diff/_mapping/field/dayofweek

Esto debería devolver los datos como:

-----------------------Índice original---------------------------

"kibana_sample_data_flights":
"Mapeos":
"día de la semana" :
"full_name": "dayofweek",
"Mapeo":
"día de la semana" :
"Tipo": "Integer"






-------------------------Datos reindexados-------------------------------

"kibana_sample_type_diff":
"Mapeos":
"día de la semana" :
"full_name": "dayofweek",
"Mapeo":
"día de la semana" :
"Tipo": "largo"





Conclusión

En esta guía, hemos analizado cómo trabajar con los nodos de ingesta de Elasticsearch a los documentos previos al procesamiento antes de indexar, convirtiendo así un campo de un tipo a otro.

Considere la documentación para obtener más información.

https: // www.elástico.CO/Guía/EN/ElasticSearch/Reference/Master/Ingest.html