Tablestore SDK for Java を使用して、テーブルの検索インデックスを作成し、インデックスフィールド、事前ソート、Time-to-Live (TTL)、仮想列、ハイライトを設定します。
前提条件
始める前に、次のことを確認してください。
-
Tablestore SDK for Java がインストールされ、クライアントが初期化されていること。
-
テーブルが存在し、データバージョンの最大数が 1 であること。
-
テーブルの TTL が -1 であるか、
UpdateRowによる更新が無効になっていること。
説明
createSearchIndex を呼び出して、テーブルの検索インデックスを作成します。同じテーブルに対して複数の検索インデックスを作成できます。リクエストでは、テーブル名、インデックス名、完全なインデックススキーマを指定し、クエリ対象の列を fieldSchemas に追加します。各インデックスフィールドのデータ型は、テーブル内の対応する列の型と一致する必要があります。
public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request)
検索インデックスの作成は非同期操作です。リクエストが成功したら、インデックス情報をクエリして、インデックスのステータスが RUNNING に変わるまで待ってからデータをクエリしてください。
次の例では、Keyword 型と Long 型のフィールドを持つ example_index を example_table に作成します。事前ソートや TTL 設定がない場合、インデックスはプライマリキーでソートされ、データは期限切れになりません。
String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("category", FieldType.KEYWORD),
new FieldSchema("price", FieldType.LONG)));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
パラメータ
CreateSearchIndexRequest には、次のパラメータが含まれます。
|
名前 |
型 |
説明 |
|
tableName (必須) |
|
テーブル名。 |
|
indexName (必須) |
|
検索インデックス名。 |
|
indexSchema (必須) |
|
インデックススキーマ。 |
|
sourceIndexName (オプション) |
|
インデックスを再構築する際のソースインデックス名。検索インデックススキーマを動的に変更する場合にのみ、このパラメータを設定します。 |
|
timeToLive (オプション) |
|
インデックスデータの TTL (秒単位)。デフォルト値は -1 です。-1 または 86,400 以上の整数を設定します。-1 の場合、データは期限切れになりません。保持期間がこの値を超えると、Tablestore はデータを自動的に削除します。 -1 以外の値を設定する場合、テーブルの |
インデックススキーマ
indexSchema は IndexSchema 型で、次のパラメータを含みます。
|
名前 |
型 |
説明 |
|
fieldSchemas (必須) |
|
インデックスフィールド。 |
|
indexSetting (オプション) |
|
インデックス設定。 |
|
indexSort (オプション) |
|
インデックスの事前ソート設定。このパラメータが設定されておらず、インデックスに Nested フィールドが含まれていない場合、Tablestore はプライマリキーでソートします。Nested インデックスは事前ソートをサポートしていません。 |
インデックスフィールド
indexSchema.fieldSchemas[] の各要素は FieldSchema 型で、次のパラメータを含みます。
|
名前 |
型 |
説明 |
|
fieldName (必須) |
|
インデックスフィールド名。このフィールドは、プライマリキー列または属性列にマッピングできます。 |
|
fieldType (必須) |
|
インデックスフィールドの型。多階層の関係には Nested を、JSON 形式のデータには JSON を、地理データには Geo-point を使用します。JSON 形式のデータを文字列として格納し、配列または Nested フィールドでクエリすることもできます。 |
|
index (オプション) |
|
フィールドに転置インデックスまたは空間インデックスを作成するかどうかを指定します。デフォルト値は |
|
enableHighlighting (オプション) |
|
要約とハイライトを有効にするかどうかを指定します。Text 型のフィールドのみがこの機能をサポートしています。デフォルト値は |
|
analyzer (オプション) |
|
Text 型フィールドのアナライザー。このパラメータが設定されていない場合、単一文字トークン化が使用されます。 |
|
analyzerParameter (オプション) |
|
アナライザー設定。 |
|
enableSortAndAgg (オプション) |
|
ソートと集計を有効にするかどうかを指定します。デフォルト値は |
|
isArray (オプション) |
|
フィールドが配列であるかどうかを指定します。配列値は JSON 配列として記述します。Nested 型フィールドの場合、このパラメータを設定する必要はありません。 |
|
subFieldSchemas (オプション) |
|
Nested 型フィールドのサブフィールド。Nested 型フィールドの場合、このパラメータは必須です。 |
|
isVirtualField (オプション) |
|
フィールドが仮想列であるかどうかを指定します。デフォルト値は |
|
sourceFieldNames (オプション) |
|
仮想列にマッピングされるテーブルフィールド。仮想列の場合、このパラメータは必須です。 |
|
dateFormats (オプション) |
|
Date 型フィールドでサポートされる日付形式。Date 型フィールドの場合、このパラメータは必須です。 |
|
vectorOptions (オプション) |
|
ベクトルのデータ型、次元、距離メトリック。ベクトルフィールドの場合、このパラメータは必須です。 |
|
jsonType (オプション) |
|
JSON 型フィールドのインデックス型。有効な値は |
ベクトルオプション
indexSchema.fieldSchemas[].vectorOptions は VectorOptions 型で、次のパラメータを含みます。
|
名前 |
型 |
説明 |
|
dataType (必須) |
|
ベクトルデータ型。 |
|
dimension (必須) |
|
ベクトルの次元。最大値は 4,096 です。 |
|
metricType (必須) |
|
距離メトリック。有効な値は
|
インデックス設定
indexSchema.indexSetting は IndexSetting 型で、次のパラメータを含みます。
|
名前 |
型 |
説明 |
|
routingFields (オプション) |
|
カスタムルーティングフィールド。1 つ以上のプライマリキー列を選択します。ほとんどの場合、1 つのフィールドで十分です。複数のフィールドを指定すると、Tablestore はそれらの値を連結します。Tablestore はルーティングフィールドの値を使用してインデックスデータを分散し、同じ値を持つレコードを同じデータパーティションに書き込みます。 |
インデックスの事前ソート
indexSchema.indexSort は Sort 型で、次のパラメータを含みます。
|
名前 |
型 |
説明 |
|
sorters (オプション) |
|
事前ソート設定。 |
プライマリキーソート
indexSchema.indexSort.sorters[] の要素が PrimaryKeySort 型の場合、プライマリキーで事前ソートします。この要素には次のパラメータが含まれます。
|
名前 |
型 |
説明 |
|
order (オプション) |
|
プライマリキーのソート順序。有効な値は |
フィールドソート
indexSchema.indexSort.sorters[] の要素が FieldSort 型の場合、フィールド値で事前ソートします。この要素には次のパラメータが含まれます。
|
名前 |
型 |
説明 |
|
fieldName (必須) |
|
事前ソートに使用されるフィールド。 |
|
order (オプション) |
|
フィールドのソート順序。有効な値は |
|
mode (オプション) |
|
多値フィールドのソート方法。 |
例
インデックスの事前ソートの設定
次の例では、created_at フィールドで昇順にインデックスデータを事前ソートします。
String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("category", FieldType.KEYWORD),
new FieldSchema("price", FieldType.LONG),
new FieldSchema("description", FieldType.TEXT),
new FieldSchema("created_at", FieldType.LONG)
.setEnableSortAndAgg(true)));
indexSchema.setIndexSort(new Sort(
Collections.<Sort.Sorter>singletonList(
new FieldSort("created_at", SortOrder.ASC))));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
インデックス TTL の設定
次の例では、7 日間の TTL を設定します。Tablestore SDK for Java 5.12.0 以降を使用してください。
String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("category", FieldType.KEYWORD),
new FieldSchema("price", FieldType.LONG)));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
request.setTimeToLiveInDays(7);
client.createSearchIndex(request);
仮想列の作成
次の例では、Keyword 型フィールド category を Long 型の仮想列にマッピングし、Long 型フィールド price を Keyword 型の仮想列にマッピングします。
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)
.setSourceFieldNames(Collections.singletonList("category")),
new FieldSchema("price", FieldType.LONG),
new FieldSchema("price_as_keyword", FieldType.KEYWORD)
.setVirtualField(true)
.setSourceFieldNames(Collections.singletonList("price"))));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
要約とハイライトの有効化
次の例では、Text 型フィールド description の要約とハイライトを有効にします。
String tableName = "example_table";
String indexName = "example_index";
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("category", FieldType.KEYWORD),
new FieldSchema("price", FieldType.LONG),
new FieldSchema("description", FieldType.TEXT)
.setEnableHighlighting(true)));
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(tableName);
request.setIndexName(indexName);
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);