Tous les produits
Search
Centre de documentation

Elasticsearch:Migrate data using the Reindex API

Dernière mise à jour :Aug 09, 2026

L'API Reindex copie les documents d'un index source vers un index de destination. Vous pouvez copier tous les documents ou uniquement ceux qui correspondent à une requête spécifique. Ce processus peut se dérouler au sein du même cluster ou entre différents clusters. Cette rubrique explique comment utiliser l'API Reindex pour migrer des données d'un cluster vers un autre.

Limites

  • Les deux clusters doivent se trouver dans la même région et la même zone de disponibilité.

  • Mode de gestion et de déploiement : Vous pouvez migrer des données d'un cluster v2 vers un cluster v3, entre deux clusters v2 ou entre deux clusters v3.

    Les clusters disposent de deux modes de gestion et de déploiement : Cloud-native New Management (v3) et Basic Management (v2). Consultez le mode de gestion et de déploiement de votre cluster sur sa page d'informations dans la console.

  • Version du cluster : La migration des données est prise en charge entre des clusters de la même version majeure, par exemple d'une version mineure inférieure à une version mineure supérieure. Il n'est pas recommandé de migrer des données entre différentes versions majeures, comme de la version 7.7.1 vers la version 8.15.1.

Prérequis

Dans cet exemple, nous migrons les données de ES_2 vers ES_1 à l'aide de l'API Reindex. Avant de commencer, effectuez les préparations suivantes.

Préparer les données de test

  • Dans ES_2, créez un index et insérez des données de test :

    PUT /product_info
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      },
      "mappings": {
          "properties": {
            "productName": {
              "type": "text",
              "analyzer": "ik_smart"
            },
            "annual_rate":{
              "type":"keyword"
            },
            "describe": {
              "type": "text",
              "analyzer": "ik_smart"
            }
        }
      }
    }

    Cette commande crée un index nommé product_info contenant les champs productName, annual_rate et describe. En cas de succès, la requête renvoie le résultat suivant.

    {
      "acknowledged" : true,
      "shards_acknowledged" : true,
      "index" : "product_info"
    }

    Insérez six documents de test :

    POST /product_info/_bulk
    {"index":{}}
    {"productName":"Financial Product A","annual_rate":"3.2200%","describe":"A 180-day fixed-term product with a minimum investment of 20,000. Stable returns with optional message notifications."}
    {"index":{}}
    {"productName":"Financial Product B","annual_rate":"3.1100%","describe":"A 90-day regular investment product with a minimum investment of 10,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product C","annual_rate":"3.3500%","describe":"A 270-day regular investment product with a minimum investment of 40,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product D","annual_rate":"3.1200%","describe":"A 90-day regular investment product with a minimum investment of 12,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product E","annual_rate":"3.0100%","describe":"A recommended 30-day regular investment product with a minimum investment of 8,000. Daily profit notifications are sent."}
    {"index":{}}
    {"productName":"Financial Product F","annual_rate":"2.7500%","describe":"A popular 3-day short-term product with no fees and a minimum investment of 500. Profit notifications are sent via SMS."}
  • Dans ES_1, créez un index pour stocker les données migrées depuis ES_2 :

    PUT dest
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      }
    }

Connexion privée via NLB et PrivateLink

Pour renforcer la sécurité du cluster, les clusters situés dans le même VPC ou dans des VPC différents sont isolés au niveau du réseau. Utilisez NLB et PrivateLink pour établir une connexion privée (connexion VPC) entre les clusters.

Comme l'illustre la figure ci-dessous, les deux clusters ES sont déployés dans le même VPC. Un service de point de terminaison est créé dans le VPC de l'utilisateur. Ensuite, une connexion privée est configurée dans ES_1 pour obtenir un point de terminaison. Enfin, le point de terminaison est associé au service de point de terminaison afin d'établir une connexion privée entre les deux clusters.

Un endpoint service est un service auquel d'autres VPC peuvent se connecter de manière privée en créant un endpoint. Vous devez créer manuellement les ressources de service associées.
Un endpoint est associé à un endpoint service et fournit une connexion réseau privée pour accéder à des services externes. Lorsque vous configurez une connexion privée pour une instance Alibaba Cloud ES, un endpoint est automatiquement créé dans l'environnement réseau où réside le cluster ES.
image

Pour connaître les étapes de configuration détaillées, consultez la rubrique Établir une connexion privée entre des clusters Alibaba Cloud ES à l'aide de NLB et PrivateLink. Effectuez les étapes 1, 2 et 3.

Sur la page Security configuration de l'instance ES_1, dans la section Cluster network settings, cliquez sur Modify à droite de Configure instance private connection. Dans le panneau Configure instance private connection, affichez l'ID de l'endpoint, l'ID du endpoint service et l'état de la connexion. Lorsque l'état de la connexion de l'endpoint est Connected, les clusters ES_1 et ES_2 peuvent communiquer via leurs adresses IP privées.

Configurer la liste d'autorisation de l'API Reindex

Pour garantir une migration sécurisée des données entre les clusters, ajoutez l'adresse de connexion privée et le port du cluster ES_2 à la liste d'autorisation de l'API Reindex de ES_1.

  1. Accédez à la page Security pour ES_1 et cliquez sur Edit à côté de Configure Private Connection. Dans le volet latéral Configure Private Connection, cliquez sur l'Endpoint ID cible.

    Pour ajouter une nouvelle connexion, cliquez sur + Add Private Connection en bas du volet latéral Configure instance private connection.

  2. Dans la console VPC, sous l'onglet Endpoint Connections, cliquez sur l'icône 展开符 à côté de l'ID de l'endpoint pour afficher son nom de domaine correspondant.

    Important

    Supprimez l'identifiant de la zone de disponibilité du nom de domaine avant de l'ajouter à la liste d'autorisation de l'API Reindex.

    Par exemple, si le nom de domaine complet est « ep-bp1-cn-hangzhou-i.epsrv-bp1.cn-hangzhou.privatelink.aliyuncs.com », supprimez l'identifiant de la zone de disponibilité « -cn-hangzhou-i » pour obtenir le nom de domaine final : « ep-bp1bp1.epsrv-bp1.cn-hangzhou.privatelink.aliyuncs.com ».

  3. Dans le fichier YML de ES_1, configurez la liste d'autorisation de l'API Reindex. L'entrée de la liste d'autorisation doit être le nom de domaine et le port de l'endpoint.

    reindex:
      remote:
        whitelist: >-
          ep-bp1bp1****************.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com:9200

    Sur la page ES cluster configuration, cliquez sur Modify configuration à droite de YML configuration. Dans l'éditeur YAML Other configure du panneau, ajoutez la configuration de la liste d'autorisation précédente.

Appeler l'API Reindex

  1. Connectez-vous à la console Kibana pour ES_1.

  2. Dans Dev Tools > Console, appelez l'API Reindex pour migrer les données.

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://ep-bp1bp1****************.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com:9200",
          "username": "elastic",
          "password": "xxx-xxxx123!"
        },
        "index": "product_info",
        "query": {
          "match": {
            "productName": "Financial Product"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }

    Catégorie

    Paramètre

    Description

    source

    remote

    Le cluster distant. Dans cet exemple, ES_2.

    host

    L'adresse d'accès du cluster ES_2. Elle comprend :

    • Le protocole. Vous pouvez le trouver sur la page Basic Information du cluster.

      Important

      Pour des raisons de sécurité, utilisez le protocole HTTPS afin d'éviter que le mot de passe ne soit transmis en texte clair lors de la connexion au cluster. Pour activer le protocole HTTPS, consultez la rubrique Protocole HTTPS.

    • Nom de domaine : l'adresse de connexion privée du cluster ES_2. Il doit s'agir du même nom de domaine que celui configuré dans la liste d'autorisation Reindex.

    • Port : fixé à 9200.

    username

    Le nom d'utilisateur par défaut du cluster est elastic.

    password

    Le mot de passe de l'utilisateur spécifié.

    Le mot de passe a été défini lors de la création du cluster. Si vous l'avez oublié, vous pouvez réinitialiser le mot de passe.

    index

    L'index source dans le cluster distant.

    query

    Une requête qui spécifie les documents à migrer.

    Dans cet exemple, les documents dont le champ productName contient « Financial Product » sont migrés de l'index du cluster ES_2 vers le cluster ES_1.

    dest

    index

    L'index de destination dans le cluster cible pour les données migrées.

    En cas de succès, la requête renvoie le résultat suivant :

    {
      "took": 211,
      "timed_out": false,
      "total": 6,
      "updated": 6,
      "created": 0,
      "deleted": 0,
      "batches": 1,
      "version_conflicts": 0,
      "noops": 0,
      "retries": {
        "bulk": 0,
        "search": 0
      },
      "throttled_millis": 0,
      "requests_per_second": -1,
      "throttled_until_millis": 0,
      "failures": []
    }
  3. Appelez l'API _search pour afficher le résultat de la migration.

    GET dest/_search

    Résultat attendu :

    {
      "took": 6,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": {
          "value": 6,
          "relation": "eq"
        },
        "max_score": 1,
        "hits": [
          {
            "_index": "dest",
            "_id": "n9kyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product D",
              "annual_rate": "3.1200%",
              "describe": "A 90-day regular investment product with a minimum investment of 12,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "nNkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "Financial Product A",
              "annual_rate": "3.2200%",
              "describe": "A 180-day fixed-term product with a minimum investment of 20,000. Stable returns with optional message notifications."
            }
          },
          {
            "_index": "dest",
            "_id": "ndkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "Financial Product B",
              "annual_rate": "3.1100%",
              "describe": "A 90-day regular investment product with a minimum investment of 10,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "ntkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product C",
              "annual_rate": "3.3500%",
              "describe": "A 270-day regular investment product with a minimum investment of 40,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "oNkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product E",
              "annual_rate": "3.0100%",
              "describe": "A recommended 30-day regular investment product with a minimum investment of 8,000. Daily profit notifications are sent."
            }
          },
          {
            "_index": "dest",
            "_id": "odkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "Financial Product F",
              "annual_rate": "2.7500%",
              "describe": "A popular 3-day short-term product with no fees and a minimum investment of 500. Profit notifications are sent via SMS."
            }
          }
        ]
      }
    }

FAQ

Q : Comment ajuster la taille des lots et le délai d'expiration de l'API Reindex en fonction de la taille des documents ?

  • Ajuster la taille des lots

    La taille de lot par défaut pour une opération de reindexation est de 1 000 documents. Si votre index contient des documents volumineux, réduisez cette valeur pour éviter les délais d'expiration.

    Dans l'exemple suivant, size est défini sur 10 pour traiter 10 documents par lot.

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://otherhost:9200"
        },
        "index": "source",
        "size": 10,
        "query": {
          "match": {
            "test": "data"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }
  • Ajuster le délai d'expiration

    Le paramètre socket_timeout, dont la valeur par défaut est de 30 secondes, définit le délai d'expiration de lecture du socket. Le paramètre connect_timeout, dont la valeur par défaut est de 1 seconde, définit le délai d'expiration de la connexion au cluster.

    Dans l'exemple suivant, le délai d'expiration de lecture du socket est défini sur 1 minute et le délai d'expiration de la connexion sur 10 secondes.

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://otherhost:9200",
          "socket_timeout": "1m",
          "connect_timeout": "10s"
        },
        "index": "source",
        "query": {
          "match": {
            "test": "data"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }