Tablestore SDK for Java を使用すると、ソース検索インデックスからカナリアインデックスを作成し、読み取りや書き込みを中断することなく、フィールドの追加・削除や、フィールドタイプ、ルーティングフィールド、事前ソート設定の変更ができます。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化済みであること。
説明
createSearchIndex API を呼び出して、ソースインデックスから完全な新しいスキーマを含むカナリアインデックスを作成します。このプロセスでは、テーブルの読み取りや書き込みは中断されず、ソースインデックス名を使用するクエリコードを変更する必要もありません。プロセスは次の手順で構成されます:
public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
ソースインデックスからカナリアインデックスを作成し、完全な新しいスキーマを送信します。
既存のデータと増分データが同期され、カナリアインデックスがソースインデックスに追いつくまで待機します。
必要に応じて、A/B テストのためにクエリトラフィックをソースインデックスとカナリアインデックスの間で分配します。
クエリ結果を検証した後、インデックスのスワップを実行し、ソースインデックス名が新しいスキーマを参照するようにします。
スワップ後、インデックスを安定化期間にわたって監視します。その後、古いスキーマを参照するカナリアインデックスを削除します。
カナリアインデックスは、スキーマ変更プロセス中に使用する一時的なインデックスであり、名前の末尾は
_reindexである必要があります。プロセス中にインデックスマッピングとトラフィックウェイトが変更されます。カナリアインデックス名を使用してデータをクエリしないでください。同時に再構築できるインデックスは最大 5 個です。次のバッチを開始する前に、現在のバッチのカナリアインデックスがソースインデックスに追いつくか、インデックスのスワップが完了するまで待機してください。
カナリアインデックスの作成
次の例では、col1 を Long から 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 (必須) |
|
テーブル名。 |
|
indexName (必須) |
|
カナリアインデックス名。名前の末尾は |
|
indexSchema (必須) |
|
カナリアインデックスの完全な新しいスキーマ。 |
|
sourceIndexName (必須) |
|
再構築の基になるソースインデックス。Tablestore はこのインデックスからカナリアインデックスを作成し、既存のテーブルデータと増分データをカナリアインデックスに同期します。 |
|
timeToLive (任意) |
|
カナリアインデックスデータの TTL (秒)。TTL を日単位で指定するには、 |
インデックススキーマ
indexSchema は IndexSchema 型で、次のパラメーターが含まれます:
|
名前 |
タイプ |
説明 |
|
fieldSchemas (必須) |
|
変更後の完全なフィールドリスト。このリストでフィールドを追加、削除、または変更することで、インデックスフィールドを変更できます。 |
|
indexSetting (任意) |
|
インデックス設定。 |
|
indexSort (任意) |
|
インデックスの事前ソート設定。 |
インデックスフィールド、インデックス設定、事前ソート設定の完全なパラメーター構造と制約については、「検索インデックスの作成」をご参照ください。