Comment changer le type de champ dans elasticsearch?

Comment changer le type de champ dans elasticsearch?
À l'aide de l'API de mappage _, vous pouvez mettre à jour les champs existants ou ajouter de nouveaux champs à un index existant.

NOTE: Pour effectuer des modifications à un index, assurez-vous d'avoir les privilèges de gestion sur l'index cible.

Utilisation de base

Pour modifier un type de champ, envoyez une demande de vente à l'API _mapping suivie du corps de la demande. Le corps de demande comprend le paramètre de propriétés et la cartographie du champ cible. Lors de la création d'un nouveau champ, assurez-vous d'inclure le nom du champ, le type et les paramètres de mappage.

Par exemple, la demande suivante modifie le type de champ de l'entier à long.

Put / my-index / _mapping

"propriétés":
"prix de base":
"Type": "Long"


Une fois réussi, vous devriez voir une sortie comme:


"Reconnu": vrai

Méthode de réindexer

Dans la plupart des cas, Elasticsearch vous empêchera de mettre à jour le type de champ d'un index existant. Cela pourrait entraîner que les données actuelles deviennent invalides et provoquer des erreurs dans l'index.

Si vous souhaitez toujours mettre à jour le type d'un champ existant, vous pouvez le faire en quelques étapes simples.

  1. Créez un nouvel index avec les informations de mappage correctes où le type de champ est modifié en votre type souhaité.
  2. Re-indexer les données de votre ancien index vers le nouvel index.
  3. Supprimer l'ancien index

L'utilisation de cette méthode vous permet de réduire le temps d'arrêt minimal pour votre index.

Créer un ancien index

Commençons par créer un index avec le type de champ incorrect.

Mettre / changer-moi

"Mappings":
"propriétés":
"identifiant":
"type": "entier"
,
"nom d'utilisateur":
"type": "texte"



Dans l'exemple ci-dessus, nous avons un index simple avec les deux champs: id et nom d'utilisateur. Les types de champs sont entier et du texte, respectivement.

Supposons que le champ contient des données comme indiqué dans la requête suivante:

Post / Change-Me / _doc


"ID": 1000,
"nom d'utilisateur": "racine"

Post / Change-Me / _doc

"ID": 1001,
"Nom d'utilisateur": "Autre"

Les deux requêtes ci-dessus créeront un document avec les données comme indiqué dans le corps de la demande.

Assurez-vous que les données existent:

Get / change-me / _search?joli

"mettre en doute":
"match_all":

Nous devrions voir les deux enregistrements comme indiqué:

Créer un nouvel index

Disons que nous voulons changer le champ ID d'un entier en un mot-clé. Nous allons commencer par créer un nouvel index avec le type de mots clés.

Mettre / changer-me-reindex

"Mappings":
"propriétés":
"identifiant":
"type": "mot-clé"
,
"nom d'utilisateur":
"type": "texte"



Dans la demande ci-dessus, nous créons un nouvel index et définissons le type d'ID sur un mot-clé.

Réindexer les anciennes données

L'étape suivante consiste à réindexer les données de l'ancien index vers le nouveau à l'aide de l'API _ Re-index. La demande est ci-dessous:

Post / _reindex

"source":
"index": "change-moi"
,
"dest":
"Index": "Change-Me-Reindex"

La demande ci-dessus copiera les documents de l'ancien index vers le nouveau où le type de champ passe d'un entier à un mot-clé.

Sortie de la requête ci-dessus:


"Taked": 8,
"timed_out": faux,
"Total": 4,
"Mis à jour": 0,
"Créé": 4,
"supprimé": 0,
"Batches": 1,
"version_conflicts": 0,
"Noops": 0,
"Retries":
"en vrac": 0,
"Recherche": 0
,
"Throttled_millis": 0,
"requêtes_per_second": -1.0,
"Throttled_until_millis": 0,
"les échecs" : [ ]

Supprimer l'ancien index

Maintenant que nous avons un index mis à jour avec le mappage correct, il est temps de supprimer l'ancien index. Nous pouvons le faire en envoyant une demande de suppression à l'index comme:

Supprimer / changer-moi

Lors du retrait réussi, vous devriez voir une sortie comme:


"Reconnu": vrai

Créer un alias d'index

Si vous aviez des applications utilisant l'ancien index, ils pourraient cesser de travailler car il n'existe plus.

Nous pouvons résoudre ce problème en créant un alias pour le nouvel index avec le nom de l'ancien index.

Mettre / changer-me-reindex / _alias / changer-me

La demande ci-dessus doit créer un alias pour le nouvel index.

Conclusion

Dans ce guide, vous avez découvert comment modifier le type d'un champ existant dans un index Elasticsearch.