`CreateSearchIndex` メソッドを使用して、データテーブルの多次元インデックスを作成します。データテーブルは複数の多次元インデックスをサポートします。多次元インデックスを作成する際に、クエリしたいフィールドをインデックスに追加します。ルートフィールドや事前ソートなどの高度なオプションも設定できます。
前提条件
Tablestore クライアントが初期化済みであること。詳細については、「Tablestore クライアントの初期化」をご参照ください。
次の条件を満たすデータテーブルが作成済みであること。詳細については、「データテーブルの作成」をご参照ください。
バージョンの最大数が 1 であること。
生存時間 (TTL) が -1 であるか、データテーブルの更新が無効になっていること。
注意事項
API
public class CreateSearchIndexRequest implements Request {
/** データテーブルの名前。 */
private String tableName;
/** 多次元インデックスの名前。 */
private String indexName;
/** 多次元インデックスのスキーマ。 */
private IndexSchema indexSchema;
/**
* ほとんどの場合、このパラメーターを設定する必要はありません。
* このパラメーターは、多次元インデックスのスキーマを動的に変更する場合にのみ、セッターメソッドを使用して設定します。このパラメーターは、インデックスの再作成のソースとなる多次元インデックスの名前を指定します。
*/
private String sourceIndexName;
/** インデックスデータの TTL (秒単位)。多次元インデックスを作成した後、UpdateSearchIndex 操作を呼び出してこのパラメーターを動的に変更できます。 */
private Integer timeToLive;
}
public class IndexSchema implements Jsonizable {
/** インデックスの設定。 */
private IndexSetting indexSetting;
/** インデックス内のすべてのフィールドの設定。 */
private List<FieldSchema> fieldSchemas;
/** インデックスのカスタム事前ソートメソッド。 */
private Sort indexSort;
}パラメーター
多次元インデックスを作成する際には、データテーブル名 (`tableName`)、多次元インデックス名 (`indexName`)、およびインデックススキーマ (`indexSchema`) を指定する必要があります。`indexSchema` には、フィールドスキーマ (`fieldSchemas`)、インデックス設定 (`indexSetting`)、およびインデックスの事前ソート設定 (`indexSort`) が含まれます。次の表にパラメーターを説明します。
パラメーター | 説明 |
tableName | データテーブルの名前。 |
indexName | 検索インデックスの名前。 |
fieldSchemas | インデックスフィールドのリスト。各 `fieldSchema` には次のパラメーターが含まれます:
|
indexSetting | インデックス設定。`routingFields` 設定が含まれます。 routingFields (任意):カスタムルートフィールド。一部のプライマリキー列をルートフィールドとして選択できます。ほとんどの場合、1 つだけ設定すれば十分です。複数のルートキーを設定した場合、システムはそれらの値を連結して単一の値にします。 |
indexSort | インデックスの事前ソート設定。`sorters` 設定が含まれます。これを設定しない場合、データはデフォルトでプライマリキーによってソートされます。 説明 `indexSort` パラメーターは、Nested 型を含むインデックスではサポートされていません。事前ソートは実行されません。 sorters (任意):インデックスの事前ソートメソッドのリスト。プライマリキーまたはフィールド値でソートできます。ソートの詳細については、「ソートとページネーション」をご参照ください。
|
sourceIndexName | 任意。ほとんどの場合、このパラメーターを設定する必要はありません。 このパラメーターは、多次元インデックスのスキーマを動的に変更する場合にのみ、セッターメソッドを使用して設定します。このパラメーターは、インデックスの再作成のソースとなる多次元インデックスの名前を指定します。 |
timeToLive | 多次元インデックスのライフサイクルの使用方法の詳細については、「ライフサイクル管理」をご参照ください。 |
例
デフォルト設定での多次元インデックスの作成
次の例は、多次元インデックスを作成する方法を示しています。インデックスには、Col_Keyword (KEYWORD 型)、Col_Long (LONG 型)、Col_Vector (VECTOR 型) の 3 つのカラムが含まれています。データはデータテーブルのプライマリキーによって事前ソートされ、有効期限はありません。
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_Long", FieldType.LONG),
// ベクター型を設定します。
new FieldSchema("Col_Vector", FieldType.VECTOR).setIndex(true)
// ベクターのディメンションは 4、類似度アルゴリズムはドット積です。
.setVectorOptions(new VectorOptions(VectorDataType.FLOAT_32, 4, VectorMetricType.DOT_PRODUCT))
));
request.setIndexSchema(indexSchema);
// クライアントを呼び出して多次元インデックスを作成します。
client.createSearchIndex(request);
}多次元インデックスの作成と IndexSort の指定
次の例は、多次元インデックスを作成する方法を示しています。インデックスには、Col_Keyword (KEYWORD 型)、Col_Long (LONG 型)、Col_Text (TEXT 型)、Timestamp (LONG 型) の 4 つのカラムが含まれています。データは Timestamp カラムによって事前ソートされます。
private static void createSearchIndexWithIndexSort(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_Long", FieldType.LONG),
new FieldSchema("Col_Text", FieldType.TEXT),
new FieldSchema("Timestamp", FieldType.LONG)
.setEnableSortAndAgg(true)));
// Timestamp カラムによる事前ソートを設定します。
indexSchema.setIndexSort(new Sort(
Arrays.<Sort.Sorter>asList(new FieldSort("Timestamp", SortOrder.ASC))));
request.setIndexSchema(indexSchema);
// クライアントを呼び出して多次元インデックスを作成します。
client.createSearchIndex(request);
}多次元インデックスの作成とライフサイクルの設定
データテーブルへの更新が無効になっていることを確認してください。
次の例は、多次元インデックスを作成する方法を示しています。インデックスには、Col_Keyword (KEYWORD 型) と Col_Long (LONG 型) の 2 つのカラムが含まれています。多次元インデックスのライフサイクルは 7 日間に設定されています。
// Tablestore SDK for Java 5.12.0 以降を使用してください。
public static void createIndexWithTTL(SyncClient client) {
int days = 7;
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_Long", FieldType.LONG)));
request.setIndexSchema(indexSchema);
// 多次元インデックスの TTL を設定します。
request.setTimeToLiveInDays(days);
// クライアントを呼び出して多次元インデックスを作成します。
client.createSearchIndex(request);
}多次元インデックスの作成と仮想カラムの指定
次の例は、2 つのカラム (Col_Keyword (KEYWORD 型) と Col_Long (LONG 型)) を含む多次元インデックスを作成する方法を示しています。このインデックスには、データテーブルの Col_Keyword カラムにマッピングされる Col_Keyword_Virtual_Long (LONG 型) と、データテーブルの Col_Long カラムにマッピングされる Col_Long_Virtual_Keyword (KEYWORD 型) の 2 つの仮想カラムも含まれています。
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_Keyword (KEYWORD 型)、Col_Long (LONG 型)、Col_Text (TEXT 型) の 3 つのカラムが含まれています。Col_Text カラムでは、まとめとハイライト機能が有効になっています。
private static void createSearchIndexWithHighlighting(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_Long", FieldType.LONG),
// フィールドのまとめとハイライト機能を有効にします。
new FieldSchema("Col_Text", FieldType.TEXT).setIndex(true).setEnableHighlighting(true)
));
request.setIndexSchema(indexSchema);
// クライアントを呼び出して多次元インデックスを作成します。
client.createSearchIndex(request);
}FAQ
関連情報
多次元インデックスを作成した後、適切なクエリタイプを選択して多次元データクエリを実行できます。多次元インデックスのクエリタイプには、Term クエリ、Terms クエリ、Match All クエリ、Match クエリ、Match Phrase クエリ、Prefix クエリ、Suffix クエリ、Range クエリ、Wildcard クエリ、Geo クエリ、Boolean クエリ、ベクター検索、Nested クエリ、および Exists クエリ があります。
データをクエリする際に、結果セットに対してソートとページネーション、ハイライト、または折りたたみ (重複排除) 操作を実行できます。
多次元インデックスを作成した後、必要に応じて管理できます。管理操作には、スキーマの動的変更、ライフサイクル管理、多次元インデックスのリスト表示、多次元インデックスの説明のクエリ、および多次元インデックスの削除が含まれます。
最大値や最小値の検索、合計の計算、行数のカウントなどのデータ分析を実行するには、集約機能またはSQL クエリ機能を使用できます。
結果セット全体の順序を保持せずにデータを迅速にエクスポートするには、並列スキャン機能を使用できます。