すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:Reindex API を使用したデータ移行

最終更新日:Feb 28, 2026

Reindex API は、1 つのインデックスから別のインデックスへ、完全なデータまたは特定の条件を満たすデータをコピーします。この処理は同一クラスター内でも、異なるクラスター間でも実行可能です。本トピックでは、Reindex API を使用して 1 つのクラスターから別のクラスターへデータを移行する方法について説明します。

制限事項

  • 2 つのクラスターは、同一リージョンおよび同一ゾーンに配置されている必要があります。

  • デプロイメントコントロールモード: v2 コントロールモードから v3 へ、v2 クラスター間、および v3 クラスター間のクラスターデータの移行をサポートします。

    クラスターには、クラウドネイティブ新規コントロール (v3) と基本コントロール (v2) という 2 種類のコントロールデプロイメントモードがあります。

    image

  • クラスターのバージョン:同一メジャーバージョン間でのデータ移行(下位バージョンから上位バージョンへの移行)をサポートしています。たとえば、8.15.1 から 8.15.1 へのデータ移行が可能です。7.7.1 から 8.15.1 のように、メジャーバージョンを跨いだデータ移行は行わないでください。

事前準備

本例では、ES_1 および ES_2 の両クラスターが 8.15.1 ベクター強化版です。目的は、Reindex API を使用して ES_2 から ES_1 へデータを移行することです。移行を開始する前に、以下の事前準備を完了してください。

テストデータの準備

  • ES_2 でインデックスを作成し、テストデータを挿入します:

    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"
            }
        }
      }
    }

    この例では、product_info という名前のインデックスを作成し、productNameannual_ratedescribe の各フィールドを含めています。正常に作成された場合、以下の結果が返されます。

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

    6 件のテストデータを挿入します:

    POST /product_info/_bulk
    {"index":{}}
    {"productName":"ファンド A","annual_rate":"3.2200%","describe":"180 日間固定運用型ファンド、最低投資額 20,000 円、安定した収益、メッセージプッシュの自己選択可能"}
    {"index":{}}
    {"productName":"ファンド B","annual_rate":"3.1100%","describe":"90 日間固定運用型ファンド、最低投資額 10,000 円、毎日の収益通知をプッシュ"}
    {"index":{}}
    {"productName":"ファンド C","annual_rate":"3.3500%","describe":"270 日間固定運用型ファンド、最低投資額 40,000 円、毎日の収益を即時プッシュ"}
    {"index":{}}
    {"productName":"ファンド D","annual_rate":"3.1200%","describe":"90 日間固定運用型ファンド、最低投資額 12,000 円、毎日の収益通知をプッシュ"}
    {"index":{}}
    {"productName":"ファンド E","annual_rate":"3.0100%","describe":"30 日間固定運用型ファンドのおすすめ、最低投資額 8,000 円、毎日の収益通知をプッシュ"}
    {"index":{}}
    {"productName":"ファンド F","annual_rate":"2.7500%","describe":"人気の短期ファンド、3 日間短期運用、手数料無料、最低投資額 500 円、ショートメッセージで収益通知を受信"}
  • ES_1 で、ES_2 から移行するデータを格納するためのインデックスを作成します:

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

NLB および PrivateLink を使用したクラスター間のプライベートネットワーク接続の確立

クラスターのセキュリティを強化するため、同一 VPC 内または異なる VPC 間のクラスターはネットワーク分離されています。NLB および PrivateLink を使用して、クラスター間のプライベートネットワーク(VPC)接続を確立できます。

以下の図に示すように、2 つの ES クラスターが同一 VPC にデプロイされています。ユーザーの VPC を使用してエンドポイントサービスを作成し、ES_1 のクラスターでプライベートネットワーク接続を構成してエンドポイントを取得した後、そのエンドポイントをエンドポイントサービスに関連付けることで、2 つのクラスター間のプライベートネットワーク接続を確立します。

エンドポイントサービス:他の VPC がエンドポイントを作成することで PrivateLink 接続を確立できるようにするサービスです。関連するサービスリソースは手動で作成します。
エンドポイント:エンドポイントサービスに関連付けられたリソースです。VPC を介して外部サービスへのプライベートネットワークアクセスのためのネットワーク接続を確立します。Alibaba Cloud ES では、インスタンスの PrivateLink を構成すると、ES のネットワーク環境内で自動的にエンドポイントが作成されます。
image

構成手順については、「NLB および PrivateLink を使用した Alibaba Cloud ES クラスター間のプライベートネットワークピアリング」をご参照ください。手順 1、2、3 を完了してください。

構成が正常に完了すると、以下のようなインターフェイスが表示されます。

image

Reindex API ホワイトリストの設定

クロスクラスター間のデータ移行のセキュリティを確保するため、ES_2 クラスターのプライベートネットワーク接続アドレスおよび通信ポート番号を、ES_1 の Reindex API ホワイトリストに追加する必要があります。

  1. ES_1 の セキュリティ ページに移動します。次に、プライベート接続の設定 をクリックし、さらに 編集 をクリックします。サイドバーの プライベート接続の設定 で、対象の エンドポイント ID をクリックします。

    image

  2. VPC コンソールの エンドポイント接続 タブで、エンドポイント ID の横にある 展开符 アイコンをクリックして、対応するドメイン名を確認します。

    重要

    Reindex API ホワイトリストを設定する際には、ドメイン名からゾーン情報を削除する必要があります。

    たとえば、完全なドメイン名が「ep-bp1****************-cn-hangzhou-i.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com」の場合、ゾーン情報「-cn-hangzhou-i」を削除して、最終的なドメイン名「ep-bp1bp1****************.epsrv-bp1****************.cn-hangzhou.privatelink.aliyuncs.com」を取得します。

    image

  3. ES_1 の YML ファイルで Reindex API ホワイトリストを設定します。ホワイトリストには、エンドポイントのドメイン名および通信ポートを含める必要があります。

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

    image

Reindex API を呼び出してデータを移行

  1. ES_1 で、Kibana コンソールにログインします。

  2. Dev Tools>Console で、Reindex API を呼び出してデータを移行します。

    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": "wealth management product"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }

    カテゴリ

    パラメーター

    説明

    source

    remote

    リモートクラスターを指定します。本例では ES_2 です。

    host

    ES_2 クラスターのエンドポイントで、以下の要素を含みます。

    • アクセスプロトコル:クラスターの 基本情報 ページで、現在使用中のアクセスプロトコルを確認します。

      重要

      セキュリティを確保するため、パスワードをプレーンテキストで送信しないよう、HTTPS プロトコルを使用してください。「HTTPS プロトコル」ドキュメントを参照して、HTTPS プロトコルを有効化してください。

    • ドメイン名:ES_2 クラスターのプライベート接続アドレスで、Reindex ホワイトリスト に設定したドメイン名と一致している必要があります。

    • 通信ポート:固定値 9200 です。

    username

    クラスターのデフォルトユーザー名は elastic です。

    password

    ユーザー名に対応するパスワードです。

    パスワードはクラスター作成時に設定されます。パスワードを忘れてしまった場合は、パスワードをリセット できます。

    index

    リモートクラスター内のソースインデックスです。

    query

    クエリ構文を使用して、移行対象のデータを指定します。

    この例では、ES_2 クラスターのインデックスの `productName` フィールドに「資産運用商品」が含まれるデータが、ES_1 クラスターに移行されます。

    dest

    index

    移行されたデータを格納する先のクラスター内のインデックスです。

    正常に実行された場合の期待される結果:

    {
      "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. _search API を呼び出して、移行結果を確認します。

    GET dest/_search

    期待される結果:

    {
      "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": "ファンド D",
              "annual_rate": "3.1200%",
              "describe": "90 日間固定運用型ファンド、最低投資額 12,000 円、毎日の収益通知をプッシュ"
            }
          },
          {
            "_index": "dest",
            "_id": "nNkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "ファンド A",
              "annual_rate": "3.2200%",
              "describe": "180 日間固定運用型ファンド、最低投資額 20,000 円、安定した収益、メッセージプッシュの自己選択可能"
            }
          },
          {
            "_index": "dest",
            "_id": "ndkyqpcBCRuDZhswJCpG",
            "_score": 1,
            "_source": {
              "productName": "ファンド B",
              "annual_rate": "3.1100%",
              "describe": "90 日間固定運用型ファンド、最低投資額 10,000 円、毎日の収益通知をプッシュ"
            }
          },
          {
            "_index": "dest",
            "_id": "ntkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "ファンド C",
              "annual_rate": "3.3500%",
              "describe": "270 日間固定運用型ファンド、最低投資額 40,000 円、毎日の収益を即時プッシュ"
            }
          },
          {
            "_index": "dest",
            "_id": "oNkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "ファンド E",
              "annual_rate": "3.0100%",
              "describe": "30 日間固定運用型ファンドのおすすめ、最低投資額 8,000 円、毎日の収益通知をプッシュ"
            }
          },
          {
            "_index": "dest",
            "_id": "odkyqpcBCRuDZhswJCpH",
            "_score": 1,
            "_source": {
              "productName": "ファンド F",
              "annual_rate": "2.7500%",
              "describe": "人気の短期ファンド、3 日間短期運用、手数料無料、最低投資額 500 円、ショートメッセージで収益通知を受信"
            }
          }
        ]
      }
    }

よくある質問

Q:移行対象のドキュメントサイズに応じて、Reindex API の呼び出し時にバッチ読み取り上限およびタイムアウトを調整するにはどうすればよいですか?

  • バッチ読み取り上限の調整

    バッチ読み取りのデフォルト最大サイズは 100 MB です。インデックスに大規模なドキュメントが含まれている場合は、必要に応じてこの値を小さく設定してください。

    以下の例では、size パラメーターにより、バッチサイズを 10 MB に設定しています。

    POST _reindex
    {
      "source": {
        "remote": {
          "host": "http://otherhost:9200"
        },
        "index": "source",
        "size": 10,
        "query": {
          "match": {
            "test": "data"
          }
        }
      },
      "dest": {
        "index": "dest"
      }
    }
  • タイムアウトの調整

    socket_timeout はソケット読み取りタイムアウトを設定します。デフォルト値は 30 秒です。connect_timeout はクラスター接続タイムアウトを設定します。デフォルト値は 1 秒です。

    以下の例では、ソケット読み取りタイムアウトを 1 分、接続タイムアウトを 10 秒に設定しています。

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