Reindex API は、リモートのソースクラスターからインデックスデータをプルすることで、セルフマネージドの Elasticsearch または OpenSearch クラスターから PolarSearch へデータを移行します。
前提条件
以下の条件が満たされていることを確認してください:
環境の依存関係:ソースの Elasticsearch または OpenSearch クラスターと PolarSearch のノードは、同じ Virtual Private Cloud (VPC) 内にある必要があります。異なる VPC にある場合は、先に進む前に、まずそれらの間でネットワーク接続を確立する必要があります。
バージョンの互換性:PolarSearch のバージョンは、ソースクラスターのバージョンと互換性がある必要があります。互換性の詳細については、「バージョン選択ガイド」をご参照ください。
ステップ 1:移行先インデックスの作成
Reindex タスクを実行する前に、PolarSearch クラスターに、ソースインデックスと同じ設定とマッピングを持つ移行先インデックスを作成します。
ソースインデックスの設定を照会します。
curl -XGET "http://<source_address>/<source_index>/_settings?pretty"ソースインデックスのマッピングを照会します。
curl -XGET "http://<source_address>/<source_index>/_mapping?pretty"PolarSearch ノードで移行先インデックスを作成します。
<source_settings>と<source_mappings>を、前のステップで取得した実際の設定とマッピングに置き換えます。curl -X PUT "http://<dest_address>/<dest_index>?pretty" \ -u <dest_username>:<dest_password> \ -H 'Content-Type: application/json' \ -d'{ "settings": { <source_settings> }, "mappings": { <source_mappings> } }'
ステップ 2:Reindex 許可リストの設定
PolarSearch ノードがリモートのソースクラスターにアクセスできるようにするには、ソースクラスターのアドレスを Reindex 許可リストに追加します。追加しない場合、Reindex タスクは次のいずれかのエラーで失敗します:
[address] not allowlisted in reindex.remote.allowlist[address] not allowlisted in reindex.remote.whitelist
許可リストは手動で設定できません。ソースクラスターのアドレスを追加するには、チケットを送信してください。
許可リストのパラメーターは静的な設定です。変更を有効にするには、PolarSearch ノードの再起動が必要です。お客様のサービスへの影響を最小限に抑えるため、再起動は業務時間外に実行してください。
ステップ 3:Reindex タスクの実行
PolarSearch ノードで次のコマンドを実行して、Reindex タスクを開始します。このコマンドは、リモートのソースクラスターから PolarSearch の移行先インデックスにデータをプルします。
curl -X POST "http://<dest_address>/_reindex?pretty" \ -u <dest_username>:<dest_password> \ -H 'Content-Type: application/json' \ -d'{ "source": { "remote": { "host": "http://<source_address>", "username": "<source_username>", "password": "<source_password>" }, "index": "<source_index>" // 移行するソースインデックスの名前 }, "dest": { "index": "<dest_index>" // PolarSearch の移行先インデックスの名前 } }'パラメーター
パラメーター
説明
source_addressソース Elasticsearch または OpenSearch クラスターのアクセスアドレスを
host:port形式で指定します。source_usernameソースクラスターにアクセスするためのユーザー名です。認証が不要な場合は、
usernameとpasswordフィールドを省略できます。source_passwordソースクラスターにアクセスするためのパスワードです。
source_index移行するソースインデックスの名前です。
dest_address移行先の PolarSearch クラスターのアクセスアドレスを host:port 形式で指定します。
dest_usernamePolarSearch にアクセスするためのユーザー名です。
dest_passwordPolarSearch にアクセスするためのパスワードです。
dest_indexPolarSearch の移行先インデックスの名前です。
Reindex タスクが完了したら、ソースインデックスと移行先インデックスのドキュメント数を比較して、移行を検証します。
# ソースインデックスのドキュメント数を照会 curl -XGET "http://<source_address>/<source_index>/_count?pretty" # 移行先インデックスのドキュメント数を照会 curl -XGET "http://<dest_address>/<dest_index>/_count?pretty" \ -u <dest_username>:<dest_password>
よくある質問
Q1:1 回の Reindex タスクで複数のインデックスを移行できますか?
いいえ。Reindex API は 1 対 1 のインデックス移行のみをサポートします。複数のインデックスを移行するには、インデックスごとに個別の Reindex タスクを実行する必要があります。データやフィールドの競合が発生する可能性があるため、複数のソースインデックスから単一の移行先インデックスへのデータ移行 (多対 1 の移行) は行わないでください。代わりに、複数の 1 対 1 の Reindex タスクを実行してください。例えば、
test_index1をtest_index_copy1に移行し、次にtest_index2をtest_index_copy2に移行します。curl -X POST "http://<dest_address>/_reindex?pretty" \ -u <dest_username>:<dest_password> \ -H 'Content-Type: application/json' \ -d'{ "source": { "remote": { "host": "http://<source_address>", "username": "<source_username>", "password": "<source_password>" }, "index": "test_index1" // 移行するソースインデックスの名前 }, "dest": { "index": "test_index_copy1" // PolarSearch の移行先インデックスの名前 } }' curl -X POST "http://<dest_address>/_reindex?pretty" \ -u <dest_username>:<dest_password> \ -H 'Content-Type: application/json' \ -d'{ "source": { "remote": { "host": "http://<source_address>", "username": "<source_username>", "password": "<source_password>" }, "index": "test_index2" // 移行するソースインデックスの名前 }, "dest": { "index": "test_index_copy2" // PolarSearch の移行先インデックスの名前 } }'Q2:Reindex タスクが illegal_argument_exception エラーで失敗した場合はどうすればよいですか?
このエラーは、ソースインデックスのフィールドタイプが移行先インデックスのマッピングと互換性がないことを示しています。Reindex タスクを実行する前に、移行先インデックスのマッピングがソースインデックスのマッピングと一致していることを確認してください。
エラー例:
"cause" : { "type" : "illegal_argument_exception", "reason" : "mapper [...] cannot be changed from type [float] to [long]" }Q3:複数のソースクラスターに対して許可リストを設定するにはどうすればよいですか?
複数のソースクラスターからデータを移行する必要がある場合は、チケットを送信してお問い合わせいただく際に、許可リストのパラメーターに複数のアドレスをカンマで区切って追加できます。例:
reindex.remote.allowlist: "host1:9200, host2:9200"。
付録:利用可能な Reindex パラメーター
リクエストの例
curl -X POST "http://<dest_address>/_reindex?pretty&refresh=false&timeout=30s&wait_for_active_shards=1&wait_for_completion=false&requests_per_second=-1&require_alias=false&scroll=5m&slices=1&max_docs=100000"
-u <dest_username>:<dest_password>
-H 'Content-Type: application/json'
-d'
{
"source": {
"remote": {
"host": "http://<source_address>",
"username": "<source_username>",
"password": "<source_password>"
},
"index": "test_index" // 移行するインデックスの名前
},
"dest": {
"index": "test_index_copy" // PolarSearch の移行先インデックスの名前
}
}'パラメーター
パラメーター | タイプ | デフォルト | 説明 |
| ブール値 |
| タスクの完了を待つかどうかを指定します。
|
| 整数 |
| 1 秒あたりに処理するサブリクエストの数で、速度制限に使用されます。 |
| 時間 |
| リクエストのタイムアウト期間です。ネットワークの変動によってタスクが中断されるのを防ぐために、ネットワークの状態やタスクの複雑さに応じて、この値を大きくすることができます (例: |
| ブール値 |
| 書き込み後すぐにインデックスをリフレッシュして、データを検索可能にするかどうかを指定します。これを |
| 整数 / "auto" |
| タスクを並列実行するために分割するスライスの数です。 説明 クラスター間の Reindex では、 |
| 整数 | - | タスクで処理するドキュメントの最大数です。デフォルトでは、一致するすべてのドキュメントが処理されます。テスト目的で、 |
| 文字列 |
| タスクを開始する前に利用可能でなければならないアクティブなシャードの数です。指定可能な値は |
| 時間 |
| ソースインデックスでのスクロールコンテキストの保持期間です。このパラメーターは、データがプルされている間、検索コンテキストを維持します。 |
| ブール値 |
| 移行先がエイリアスである必要があるかどうかを指定します。 |