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

Tablestore:検索インデックススキーマの動的な変更

最終更新日:Jul 25, 2026

Tablestore SDK for Java を使用すると、ソース検索インデックスからカナリアインデックスを作成し、読み取りや書き込みを中断することなく、フィールドの追加・削除や、フィールドタイプ、ルーティングフィールド、事前ソート設定の変更ができます。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化済みであること。

説明

createSearchIndex API を呼び出して、ソースインデックスから完全な新しいスキーマを含むカナリアインデックスを作成します。このプロセスでは、テーブルの読み取りや書き込みは中断されず、ソースインデックス名を使用するクエリコードを変更する必要もありません。プロセスは次の手順で構成されます:

public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
  1. ソースインデックスからカナリアインデックスを作成し、完全な新しいスキーマを送信します。

  2. 既存のデータと増分データが同期され、カナリアインデックスがソースインデックスに追いつくまで待機します。

  3. 必要に応じて、A/B テストのためにクエリトラフィックをソースインデックスとカナリアインデックスの間で分配します。

  4. クエリ結果を検証した後、インデックスのスワップを実行し、ソースインデックス名が新しいスキーマを参照するようにします。

  5. スワップ後、インデックスを安定化期間にわたって監視します。その後、古いスキーマを参照するカナリアインデックスを削除します。

重要
  • カナリアインデックスは、スキーマ変更プロセス中に使用する一時的なインデックスであり、名前の末尾は _reindex である必要があります。プロセス中にインデックスマッピングとトラフィックウェイトが変更されます。カナリアインデックス名を使用してデータをクエリしないでください。

  • 同時に再構築できるインデックスは最大 5 個です。次のバッチを開始する前に、現在のバッチのカナリアインデックスがソースインデックスに追いつくか、インデックスのスワップが完了するまで待機してください。

カナリアインデックスの作成

次の例では、col1Long から Keyword に変更し、col2 を削除し、Long フィールド col3 を追加し、id をルーティングフィールドとして設定します。

String tableName = "example_table";
String sourceIndexName = "example_index";
String reindexName = "example_index_reindex";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
        new FieldSchema("id", FieldType.KEYWORD),
        new FieldSchema("col1", FieldType.KEYWORD),
        new FieldSchema("col3", FieldType.LONG)));

IndexSetting indexSetting = new IndexSetting();
indexSetting.setRoutingFields(Arrays.asList("id"));
indexSchema.setIndexSetting(indexSetting);

CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(reindexName);
request.setSourceIndexName(sourceIndexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);

リクエストが成功したら、カナリアインデックス情報をクエリします。ステータスが RUNNING であること、brotherIndexName にソースインデックス名が含まれていること、新しいスキーマが正しいことを確認します。RUNNING 状態は、カナリアインデックスが作成されたことを示します。カナリアインデックスがソースインデックスに追いついたことを示すものではありません。

インデックスの検証と切り替え

重要

コンソールでカナリアインデックスが切り替え可能で安全であることが示された後にのみ、A/B テストとインデックスのスワップを実行してください。スワップ後、ソースインデックス名は新しいスキーマを参照し、カナリアインデックス名は古いスキーマを参照します。カナリアインデックスを削除する前に、インデックスを検証し、安定化期間にわたって監視してください。

Tablestore コンソール を使用して、同期の進捗確認、トラフィックウェイトの設定、インデックスのスワップ、カナリアインデックスの削除を行います。手順については、「検索インデックススキーマの動的な変更」をご参照ください。

パラメーター

CreateSearchIndexRequest には次のパラメーターが含まれます:

名前

タイプ

説明

tableName (必須)

String

テーブル名。

indexName (必須)

String

カナリアインデックス名。名前の末尾は _reindex である必要があります。

indexSchema (必須)

IndexSchema

カナリアインデックスの完全な新しいスキーマ。

sourceIndexName (必須)

String

再構築の基になるソースインデックス。Tablestore はこのインデックスからカナリアインデックスを作成し、既存のテーブルデータと増分データをカナリアインデックスに同期します。

timeToLive (任意)

Integer

カナリアインデックスデータの TTL (秒)。TTL を日単位で指定するには、setTimeToLiveInDays を呼び出します。有効な値と制約については、「検索インデックスの TTL を設定する」をご参照ください。

インデックススキーマ

indexSchemaIndexSchema 型で、次のパラメーターが含まれます:

名前

タイプ

説明

fieldSchemas (必須)

List<FieldSchema>

変更後の完全なフィールドリスト。このリストでフィールドを追加、削除、または変更することで、インデックスフィールドを変更できます。

indexSetting (任意)

IndexSetting

インデックス設定。routingFields を使用してルーティングフィールドを変更します。

indexSort (任意)

Sort

インデックスの事前ソート設定。

インデックスフィールド、インデックス設定、事前ソート設定の完全なパラメーター構造と制約については、「検索インデックスの作成」をご参照ください。