Tablestore SDK for Java は、仮想カラムを使用して、テーブルスキーマの変更やデータの書き換えを行うことなく、ソースフィールドをさまざまなインデックスフィールドタイプにマッピングできます。
前提条件
開始する前に、次のことを確認してください。
Tablestore SDK for Java がインストールされ、クライアントが初期化されていること
テーブルの最大バージョン数が 1 に設定されていること
テーブルの TTL が -1 に設定されているか、
UpdateRowによるテーブルの更新が無効になっていること
使用上の注意
仮想カラムを作成する際、ソースフィールドと仮想カラムは、次の型変換ルールに準拠している必要があります。
|
ソースフィールドタイプ |
仮想カラムタイプ |
|
文字列 |
キーワード (配列を含む)、ファジーキーワード (配列を含む)、テキスト (配列を含む)、ロング (配列を含む)、ダブル (配列を含む)、日付 (配列を含む)、IP (配列を含む)、ジオポイント (配列を含む) |
|
ロング |
キーワード、ファジーキーワード、テキスト、日付 |
|
ダブル |
キーワード、ファジーキーワード、テキスト |
仮想カラムはクエリでのみ使用でき、ColumnsToGet では返されません。値を取得するには、仮想カラムにマッピングされているソースフィールドを返す必要があります。
説明
仮想カラムは、ソーステーブルのフィールドを異なる検索インデックスフィールドタイプにマッピングします。仮想カラムは、検索インデックスの作成時に設定するか、既存のインデックスのスキーマを動的に変更して追加します。マッピングが作成された後、仮想カラム名でデータをクエリします。
次の例では、仮想カラムを持つ検索インデックスを作成し、その仮想カラムの 1 つを使用してデータをクエリするという一連のワークフローを示します。
仮想カラムの作成
次の例では、キーワード型のソースフィールド category をロング型の仮想カラムに、ロング型のソースフィールド price をキーワード型の仮想カラムにマッピングします。
String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("category", FieldType.KEYWORD),
new FieldSchema("category_as_long", FieldType.LONG)
.setVirtualField(true)
.setSourceFieldName("category"),
new FieldSchema("price", FieldType.LONG),
new FieldSchema("price_as_keyword", FieldType.KEYWORD)
.setVirtualField(true)
.setSourceFieldName("price")));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
リクエストが成功した後、データをクエリする前に、検索インデックスのデータ同期が完了するまで待機します。
仮想カラムを使用したデータクエリ
次の例では、price_as_keyword 仮想カラムが文字列 1000 と等しい行をクエリし、ソーステーブルのカラムを返します。
String tableName = "example_table";
String indexName = "example_index";
TermsQuery query = new TermsQuery();
query.setFieldName("price_as_keyword");
query.addTerm(ColumnValue.fromString("1000"));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(query);
searchQuery.setGetTotalCount(true);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());
パラメーター
FieldSchema には、仮想カラムを定義するための次のパラメーターが含まれています。その他の検索インデックスフィールドのパラメーターについては、「検索インデックスの作成」をご参照ください。
|
名前 |
タイプ |
説明 |
|
fieldName (必須) |
|
仮想カラム名。名前はインデックス内で一意である必要があります。 |
|
fieldType (必須) |
|
仮想カラムの検索インデックスフィールドタイプ。タイプは、サポートされている変換ルールに準拠している必要があります。 |
|
isVirtualField (必須) |
|
フィールドを仮想列として識別するには、このパラメーターを |
|
sourceFieldNames (必須) |
|
仮想列にマッピングするソースフィールド名。現在、1 つのソースフィールドのみがサポートされています。 |