Elasticsearch Reindex Change Type de champ

Elasticsearch Reindex Change Type de champ

Travailler avec des bases de données est très amusant, mais peut parfois être difficile, surtout lorsqu'il s'agit de données déjà existantes.

Par exemple, si vous souhaitez modifier le type d'un champ spécifique, cela pourrait vous obliger à retirer le service, ce qui peut avoir de graves répercussions, en particulier dans les services qui traitent de grandes quantités de données.

Heureusement, nous pouvons utiliser les fonctionnalités puissantes d'Elasticsearch telles que la réindexage, ingérer des nœuds, des pipelines et des processeurs pour rendre ces tâches très faciles.

Ce tutoriel vous montrera comment modifier un type de champ dans un index spécifique vers un autre, en utilisant les nœuds Elasticsearch Ingest. L'utilisation de cette approche éliminera les temps d'arrêt qui affectent les services tout en réussissant à effectuer les tâches de changement de type de champ.

Introduction à ingérer des nœuds

Le nœud d'ingestion d'Elasticsearch vous permet de prétraiter des documents avant leur indexation.

Un nœud Elasticsearch est une instance spécifique d'Elasticsearch; Les nœuds connectés (plus d'un) font un seul cluster.

Vous pouvez afficher les nœuds disponibles dans le cluster en cours d'exécution avec la demande:

Get / _nodes /

La commande curl pour ceci est:

curl -xget “http: // localhost: 9200 / _nodes /”

L'exécution de cette commande devrait vous donner des informations massives sur les nœuds, comme indiqué ci-dessous (sortie tronquée):


"_Nodes":
"Total": 3,
"réussi": 3,
"Échec": 0
,
"Cluster_name": "22E0BEE6EF91461D82D9B0F1B4B13B4A",
"nœuds":
"gslmjtkytemoox-eo7em4w":
"Nom": "instance-0000000003",
"Transport_address": "172.28.86.133: 19925 ",
"hôte": "172.28.86.133 ",
"IP": "172.28.86.133 ",
"Version": "7.dix.2 ",
"build_flavor": "par défaut",
"build_type": "docker",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"total_indexing_buffer": 214748364,
"les rôles" : [
"données",
"data_cold",
"data_content",
"data_hot",
"data_warm",
"ingérer",
"maître",
"Remote_cluster_Client",
"transformer"
]],
"les attributs" :
"logical_availability_zone": "Zone-0",
"server_name": "instance-0000000003.22E0BEE6EF91461D82D9B0F1B4B13B4A ",
"Disponibilité_Zone": "Us-West-1C",
"Xpack.installé ":" true ",
"instance_configuration": "AWS.données.HIGIO.i3 ",
"transformer.Node ":" true ",
"région": "US-West-1"
,
"paramètres" :
"S3":
"client" :
"élastique-interne-22e0be":
"Point de terminaison": "S3-US-West-1.Amazonaws.com "


,
--------------------------------sortie tronquée---------------------

Par défaut, tous les nœuds Elasticsearch permettent d'ingérer et sont capables de gérer les opérations d'ingestion. Cependant, pour les opérations de forte ingestion, vous pouvez créer un seul nœud dédié à l'ingestion uniquement.

Pour gérer PRE_PROCESS, avant d'indexer les documents, nous devons définir un pipeline qui indique la série PRÉPROCESSEURS.

Les préprocesseurs sont des ensembles d'instructions enroulés autour d'un pipeline et sont exécutés un à la fois.

Ce qui suit est la syntaxe générale de la façon de définir un pipeline:


"Description": "Convertit-moi",
"Processeurs": [
"convertir" :
"champ": "id",
"type": "entier"
]

La propriété description dit ce que le pipeline doit réaliser. Le paramètre suivant est les préprocesseurs, transmis comme une liste dans l'ordre de leur exécution.

Créer un pipeline de converti

Pour créer un pipeline que nous utiliserons pour convertir un type, utilisez la demande de put avec le point de terminaison de l'API le plus _inge:

Mettez _ingest / pipeline / convert_pipeline

«Description»: «Convertit le terrain de la semaine de la semaine en un long entier»,
"Processeurs": [

"convertir" :
"Field": "Dayofweek",
"Type": "Long"


]]

Pour Curl, utilisez la commande:

curl -xput "http: // localhost: 9200 / _ingest / pipeline / convert_pipeline" -h 'contenu-type: application / json' -d '"description": "convertit le champ dayofweek en un long de entier", " processeurs ": [" converti ": " champ ":" dayofweek "," type ":" long "] '

Reindex et convertir Taper

Une fois que nous avons le pipeline dans le nœud Ingest, tout ce que nous devons faire est d'appeler l'API d'indexation et de passer le pipeline comme argument dans le dest du corps de demande:

Post _reindex

"source":
"index": "kibana_sample_data_flights"
,
"dest":
"index": "kibana_sample_type_diff",
"pipeline": "convert_pipeline"

Pour Curl:

curl -xpost "http: // localhost: 9200 / _reindex" -h 'contenu-type: application / json' -d '"source": "index": "kibana_sample_data_flights", "dest": "index ":" kibana_sample_type_diff "," pipeline ":" convert_pipeline " '

Vérifiez la conversion

Pour vérifier que le pipeline s'est appliqué correctement, utilisez la demande GET pour récupérer ce champ spécifique comme:

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

Cela devrait renvoyer les données comme:

-----------------------Index d'origine---------------------------

"kibana_sample_data_flights":
"Mappings":
"jour de la semaine" :
"full_name": "dayofweek",
"Mapping":
"jour de la semaine" :
"type": "entier"






-------------------------Données réindexées-------------------------------

"kibana_sample_type_diff":
"Mappings":
"jour de la semaine" :
"full_name": "dayofweek",
"Mapping":
"jour de la semaine" :
"Type": "Long"





Conclusion

Dans ce guide, nous avons examiné comment travailler avec Elasticsearch Ingest les nœuds en documents pré-processus avant d'indexer, convertissant ainsi un champ d'un type à un autre.

Considérez la documentation pour en savoir plus.

https: // www.élastique.co / guide / en / elasticsearch / référence / maître / ingestion.html