機能概要
仮想カラム機能を使用すると、検索インデックスを作成するときに、テーブルの列を検索インデックスの仮想カラムにマッピングできます。仮想カラムのタイプは、テーブルの列のタイプとは異なる場合があります。これにより、テーブルスキーマとデータを変更せずに列を作成できます。新しい列は、クエリを高速化するために使用したり、異なるトークン化方法で構成したりできます。
テーブルの同じフィールドにマッピングされているテキストフィールドに、異なるトークン化方法を設定できます。
単一の文字列カラムを、検索インデックスの複数のテキストカラムにマッピングできます。さまざまなテキストカラムは、さまざまなビジネス要件を満たすために、異なるトークン化方法を使用します。
クエリの高速化
データをクレンジングしたり、テーブルスキーマを再作成したりする必要はありません。テーブルの必要な列を検索インデックスの列にマッピングするだけで済みます。列のタイプは、テーブルと検索インデックスの間で異なる場合があります。たとえば、数値型をキーワード型にマッピングして用語クエリの パフォーマンスを向上させ、文字列型を数値型にマッピングして範囲クエリのパフォーマンスを向上させることができます。
方法
Tablestore コンソールまたは Tablestore SDK を使用して、仮想カラム機能を使用できます。仮想カラム機能を使用する前に、以下の準備が整っていることを確認してください。
Tablestore を管理する権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーが作成されています。 RAM ユーザーに Tablestore を管理する権限を付与する方法については、RAM ポリシーを使用して RAM ユーザーに権限を付与する を参照してください。
Tablestore SDK を使用して仮想カラム機能を使用する場合は、Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ペアが作成されます。詳細については、AccessKey ペアを作成する を参照してください。
データテーブルが作成されます。詳細については、データテーブルの操作 を参照してください。
Tablestore SDK を使用して仮想カラム機能を使用する場合は、OTSClient インスタンスが初期化されます。詳細については、OTSClient インスタンスを初期化する を参照してください。
Tablestore コンソールで仮想カラム機能を使用する
Tablestore コンソールで検索インデックスを作成するときにフィールドを仮想カラムとして指定すると、仮想カラムを使用してデータをクエリできます。
インデックス タブに移動します。
Tablestore コンソールにログオンします。
上部のナビゲーションバーで、リージョンとリソースグループを選択します。
概要インスタンスの管理アクションページで、管理するインスタンスの名前をクリックするか、インスタンスの列にあるをクリックします。
テーブルインスタンスの詳細インデックスアクションタブのセクションで、検索インデックスを作成するデータテーブルの名前をクリックします。 テーブルの管理ページで、インデックスをクリックします。 また、データテーブルの列にあるをクリックすることもできます。
[インデックス] タブで、[検索インデックスの作成] をクリックします。
インデックスの作成 ダイアログ ボックスで、検索インデックスを作成するときに仮想列を指定します。
デフォルトでは、システムによって検索インデックスの名前が生成されます。 検索インデックスの名前を指定することもできます。
スキーマ生成タイプ パラメーターを構成します。
スキーマ生成タイプを手動に設定した場合は、追加するフィールドごとにフィールド名を入力し、フィールドタイプと配列を有効にするかどうかを指定します。
スキーマ生成タイプを自動生成に設定すると、システムはデータテーブルの主キー列と属性列をインデックスフィールドとして自動的に使用します。ビジネス要件に基づいて、システムによって自動的に追加される各フィールドのフィールドタイプと、配列を有効にするかどうかを指定します。
説明 フィールド名とフィールド タイプの値は、データテーブルの値と一致している必要があります。データテーブルのフィールドタイプと検索インデックスのフィールドタイプ間のマッピングについては、基本データ型のマッピングを参照してください。
仮想カラムを作成します。
重要 仮想カラムを作成するには、データテーブルにソースフィールドが含まれており、ソースフィールドのデータタイプが仮想カラムのデータタイプと一致している必要があります。
アイコンをクリックします。
フィールド名 パラメーターと フィールド タイプ パラメーターを構成します。
仮想フィールドをオンにし、インデックス フィールド名に値を指定します。
ルーティングキー、有効期間 (TTL)、または検索インデックスの事前ソート方法を指定する場合は、詳細設定 をオンにします。詳細については、検索インデックスの作成 を参照してください。
OK をクリックします。
検索インデックスを作成したら、[インデックス] タブの検索インデックスの アクション 列にある インデックスの詳細 をクリックします。[インデックスの詳細] ページでは、[基本的なインデックス情報]、[インデックスメーター]、[ルーティングキー]、[インデックスフィールド]、および [事前ソート] セクションのパラメーター設定を確認できます。
仮想カラムを使用してデータをクエリします。
検索インデックスのデータを管理アクション列にあるをクリックします。
検索 ダイアログ ボックスで、パラメーターを構成します。
デフォルトでは、システムはすべての属性列を返します。特定の属性列を返すには、すべての列 をオフにし、返したい属性列を指定します。属性列はカンマ (,) で区切ります。
インデックスフィールドを選択し、追加 をクリックして、インデックスフィールドをクエリ条件として追加します。インデックスフィールドのクエリタイプと値を指定します。ビジネス要件に基づいてさらにクエリ条件を追加するには、この手順を繰り返します。
デフォルトでは、並べ替え機能は無効になっています。並べ替えを有効にするには、並べ替え をオンにし、クエリ結果の並べ替え基準となるインデックスフィールドを追加し、並べ替え方法を設定します。
デフォルトでは、集計機能は無効になっています。特定のフィールドの統計情報を収集するには、統計情報の収集をオンにし、統計情報を収集するフィールドを指定し、統計情報の収集に必要な情報を設定します。
OK をクリックします。
クエリ条件を満たすデータは、インデックス タブで指定された順序に基づいて表示されます。
Tablestore SDK を使用して仮想カラム機能を使用する
Tablestore SDK を使用して検索インデックスを作成するときにフィールドを仮想カラムとして指定すると、仮想カラムを使用してデータをクエリできます。
検索インデックスを作成し、仮想カラムを指定します。
次のサンプルコードは、Col_Keyword 列と Col_Long 列で構成される検索インデックスを作成する例を示しています。 各列には仮想カラムがあります。 Col_Keyword_Virtual_Long 列はデータテーブルの Col_Keyword 列にマッピングされ、Col_Long_Virtual_Keyword 列はデータテーブルの Col_Long 列にマッピングされます。
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
// データテーブルの名前を指定します。
request.setTableName("<TABLE_NAME>");
// 検索インデックスの名前を指定します。
request.setIndexName("<SEARCH_INDEX_NAME>");
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
// フィールドの名前とタイプを指定します。
new FieldSchema("Col_Keyword", FieldType.KEYWORD),
// フィールドの名前とタイプを指定します。
new FieldSchema("Col_Keyword_Virtual_Long", FieldType.LONG)
// フィールドが仮想カラムかどうかを指定します。
.setVirtualField(true)
// データテーブルで仮想カラムがマッピングされるソースフィールドの名前を指定します。
.setSourceFieldName("Col_Keyword"),
new FieldSchema("Col_Long", FieldType.LONG),
new FieldSchema("Col_Long_Virtual_Keyword", FieldType.KEYWORD)
.setVirtualField(true)
.setSourceFieldName("Col_Long")));
request.setIndexSchema(indexSchema);
// クライアントを呼び出して検索インデックスを作成します。
client.createSearchIndex(request);
}
仮想カラムを使用してデータをクエリします。
次のサンプルコードは、Col_Long_Virtual_Keyword 列の値が「1000」と一致する行をクエリする例を示しています。 この例では、一致する行の一部と一致する行の総数が返されます。
private static void query(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
TermsQuery termsQuery = new TermsQuery(); // クエリメソッドを TermsQuery に設定します。
termsQuery.setFieldName("Col_Long_Virtual_Keyword"); // 一致させるフィールドの名前を指定します。
termsQuery.addTerm(ColumnValue.fromString("1000")); // 一致させる値を設定します。
searchQuery.setQuery(termsQuery);
searchQuery.setGetTotalCount(true); // 一致する行の総数を返すように指定します。
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true); // ReturnAll を true に設定して、仮想カラムを返さずにすべての列を返します。
searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、クエリ条件を満たす行の総数を表示するように指定します。
System.out.println("Row: " + resp.getRows());
}