Búsqueda elástica

Elasticsearch Reindex Change Tipo de campo

Elasticsearch Reindex Change Tipo de campo

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 un campo específico, es posible que deba desactivar el servicio, lo que puede tener graves repercusiones, especialmente en los servicios que procesan grandes cantidades de datos.

Afortunadamente, podemos utilizar las potentes funciones de Elasticsearch, como la reindexación, la ingesta de nodos, las canalizaciones y los procesadores para facilitar estas tareas.

Este tutorial le mostrará cómo cambiar un tipo de campo en un índice específico a otro, usando los nodos Elasticsearch Ingest. El uso de este enfoque eliminará el tiempo de inactividad que afecta a los servicios y, al mismo tiempo, logrará realizar las tareas de cambio de tipo de campo.

Introducción a los nodos de ingesta

El nodo de ingesta de Elasticsearch le permite preprocesar documentos antes de su indexación.

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

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

GET / _nodes /

El comando cURL para esto es:

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

La ejecución de este comando debería brindarle información masiva sobre los nodos, como se muestra a continuación (salida truncada):


"_nodes":
"total": 3,
"exitoso": 3,
"fallido": 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": "ventana acoplable",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"total_indexing_buffer": 214748364,
"roles": [
"datos",
"data_cold",
"contenido_de_datos",
"data_hot",
"data_warm",
"ingerir",
"Maestro",
"cliente_clúster_remoto",
"transformar"
],
"atributos":
"zona_disponibilidad_lógica": "zona-0",
"nombre_servidor": "instancia-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
"zona_disponibilidad": "us-west-1c",
"xpack.instalado ":" verdadero ",
"instance_configuration": "aws.datos.highio.i3 ",
"transformar.nodo ":" verdadero ",
"region": "us-west-1"
,
"ajustes" :
"s3":
"cliente":
"elastic-internal-22e0be":
"endpoint": "s3-us-west-1.Amazonas.com "


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

De forma predeterminada, todos los nodos de Elasticsearch habilitan la ingesta y son capaces de manejar operaciones de ingesta. Sin embargo, para operaciones de ingesta intensiva, puede crear un único nodo dedicado a ingesta únicamente.

Para manejar pre_process, antes de indexar los documentos, necesitamos definir una canalización que indique la serie de preprocesadores.

Los preprocesadores son conjuntos de instrucciones envueltas en una canalización y se ejecutan de una en una.

La siguiente es la sintaxis general de cómo definir una canalización:


"description": "Conviérteme",
"procesadores": [
"convertir":
"campo": "id",
"tipo": "entero"
]

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

Crear una canalización de conversión

Para crear una canalización que usaremos para convertir un tipo, use la solicitud PUT con el punto final _ingest API como:

PUT _ingest / pipeline / convert_pipeline

"Descripción": "convierte el campo dayOfWeek en un long de integer",
"procesadores": [

"convertir":
"campo": "dayOfWeek",
"tipo": "largo"


]

Para cURL, use el comando:

curl -XPUT "http: // localhost: 9200 / _ingest / pipeline / convert_pipeline" -H 'Content-Type: application / json' -d '"description": "convierte el campo dayOfWeek en un long de integer", " procesadores ": [" convert ": " campo ":" dayOfWeek "," type ":" long "] '

Reindexar y convertir Tipo

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

POST _reindex

"fuente":
"index": "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 '"source": "index": "kibana_sample_data_flights", "dest": "index ":" kibana_sample_type_diff "," canalización ":" convert_pipeline " '

 Verificar conversión

Para verificar que la canalización 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":
"asignaciones":
"día de la semana" :
"full_name": "dayOfWeek",
"mapeo":
"día de la semana" :
"tipo": "entero"






-------------------------DATOS REINDEXADOS-------------------------------

"kibana_sample_type_diff":
"asignaciones":
"día de la semana" :
"full_name": "dayOfWeek",
"mapeo":
"día de la semana" :
"tipo": "largo"





Conclusión

En esta guía, hemos visto cómo trabajar con los nodos Elasticsearch Ingest para preprocesar documentos antes de indexarlos, convirtiendo así un campo de un tipo a otro.

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

https: // www.elástico.co / guide / es / elasticsearch / reference / master / ingest.html

Las 5 mejores cartas de captura de juegos
Todos hemos visto y amado la transmisión de juegos en YouTube. PewDiePie, Jakesepticye y Markiplier son solo algunos de los mejores jugadores que han ...
Cómo desarrollar un juego en Linux
Hace una década, no muchos usuarios de Linux predecían que su sistema operativo favorito algún día sería una plataforma de juegos popular para videoju...
Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...