すべてのプロダクト
Search
ドキュメントセンター

Tablestore:検索インデックスの作成

最終更新日:Jul 24, 2026

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_indexexample_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 (必須)

String

テーブル名。

indexName (必須)

String

検索インデックス名。

indexSchema (必須)

IndexSchema

インデックススキーマ。

sourceIndexName (オプション)

String

インデックスを再構築する際のソースインデックス名。検索インデックススキーマを動的に変更する場合にのみ、このパラメータを設定します。

timeToLive (オプション)

Integer

インデックスデータの TTL (秒単位)。デフォルト値は -1 です。-1 または 86,400 以上の整数を設定します。-1 の場合、データは期限切れになりません。保持期間がこの値を超えると、Tablestore はデータを自動的に削除します。

-1 以外の値を設定する場合、テーブルの UpdateRow による更新を無効にする必要があります。インデックスの TTL は、テーブルの TTL を超えることはできません。インデックスの作成後、updateSearchIndex を呼び出して値を変更できます。TTL を日数で指定するには、setTimeToLiveInDays を呼び出します。詳細については、「検索インデックスの TTL の設定」をご参照ください。

インデックススキーマ

indexSchemaIndexSchema 型で、次のパラメータを含みます。

名前

説明

fieldSchemas (必須)

List<FieldSchema>

インデックスフィールド。

indexSetting (オプション)

IndexSetting

インデックス設定。

indexSort (オプション)

Sort

インデックスの事前ソート設定。このパラメータが設定されておらず、インデックスに Nested フィールドが含まれていない場合、Tablestore はプライマリキーでソートします。Nested インデックスは事前ソートをサポートしていません。

インデックスフィールド

indexSchema.fieldSchemas[] の各要素は FieldSchema 型で、次のパラメータを含みます。

名前

説明

fieldName (必須)

String

インデックスフィールド名。このフィールドは、プライマリキー列または属性列にマッピングできます。

fieldType (必須)

FieldType

インデックスフィールドの型。多階層の関係には Nested を、JSON 形式のデータには JSON を、地理データには Geo-point を使用します。JSON 形式のデータを文字列として格納し、配列または Nested フィールドでクエリすることもできます。

index (オプション)

boolean

フィールドに転置インデックスまたは空間インデックスを作成するかどうかを指定します。デフォルト値は true です。false に設定すると、フィールドにインデックスは作成されません。

enableHighlighting (オプション)

boolean

要約とハイライトを有効にするかどうかを指定します。Text 型のフィールドのみがこの機能をサポートしています。デフォルト値は false です。

analyzer (オプション)

String

Text 型フィールドのアナライザー。このパラメータが設定されていない場合、単一文字トークン化が使用されます。

analyzerParameter (オプション)

AnalyzerParameter

アナライザー設定。analyzer を設定する場合、そのアナライザーに必要なパラメータを設定する必要があります。

enableSortAndAgg (オプション)

boolean

ソートと集計を有効にするかどうかを指定します。デフォルト値は true です。Text 型のフィールドはソートや集計をサポートしていません。Text コンテンツをソートまたは集計するには、Keyword 型の仮想列を作成します。

isArray (オプション)

boolean

フィールドが配列であるかどうかを指定します。配列値は JSON 配列として記述します。Nested 型フィールドの場合、このパラメータを設定する必要はありません。

subFieldSchemas (オプション)

List<FieldSchema>

Nested 型フィールドのサブフィールド。Nested 型フィールドの場合、このパラメータは必須です。

isVirtualField (オプション)

boolean

フィールドが仮想列であるかどうかを指定します。デフォルト値は false です。

sourceFieldNames (オプション)

List<String>

仮想列にマッピングされるテーブルフィールド。仮想列の場合、このパラメータは必須です。

dateFormats (オプション)

List<String>

Date 型フィールドでサポートされる日付形式。Date 型フィールドの場合、このパラメータは必須です。

vectorOptions (オプション)

VectorOptions

ベクトルのデータ型、次元、距離メトリック。ベクトルフィールドの場合、このパラメータは必須です。

jsonType (オプション)

JsonType

JSON 型フィールドのインデックス型。有効な値は OBJECTNESTED です。JSON 型フィールドの場合、このパラメータは必須です。

ベクトルオプション

indexSchema.fieldSchemas[].vectorOptionsVectorOptions 型で、次のパラメータを含みます。

名前

説明

dataType (必須)

VectorDataType

ベクトルデータ型。FLOAT_32 のみがサポートされています。

dimension (必須)

Integer

ベクトルの次元。最大値は 4,096 です。

metricType (必須)

VectorMetricType

距離メトリック。有効な値は EUCLIDEANCOSINEDOT_PRODUCT です。スコアが高いほど類似性が高いことを示します。

EUCLIDEAN は直線距離を測定し、Tablestore では最終的な平方根計算を省略します。COSINE はベクトル間の角度の余弦を測定し、テキスト類似性によく使用されます。DOT_PRODUCT は等次元ベクトルの対応する座標を乗算し、結果を合計します。詳細については、「距離メトリックアルゴリズム」をご参照ください。

インデックス設定

indexSchema.indexSettingIndexSetting 型で、次のパラメータを含みます。

名前

説明

routingFields (オプション)

List<String>

カスタムルーティングフィールド。1 つ以上のプライマリキー列を選択します。ほとんどの場合、1 つのフィールドで十分です。複数のフィールドを指定すると、Tablestore はそれらの値を連結します。Tablestore はルーティングフィールドの値を使用してインデックスデータを分散し、同じ値を持つレコードを同じデータパーティションに書き込みます。

インデックスの事前ソート

indexSchema.indexSortSort 型で、次のパラメータを含みます。

名前

説明

sorters (オプション)

List<Sort.Sorter>

事前ソート設定。PrimaryKeySort はプライマリキーでソートし、FieldSort はフィールド値でソートします。FieldSort で使用されるフィールドは、ソートと集計が有効になっているインデックスフィールドである必要があります。詳細については、「結果のソートとページネーション」をご参照ください。

プライマリキーソート

indexSchema.indexSort.sorters[] の要素が PrimaryKeySort 型の場合、プライマリキーで事前ソートします。この要素には次のパラメータが含まれます。

名前

説明

order (オプション)

SortOrder

プライマリキーのソート順序。有効な値は SortOrder.ASCSortOrder.DESC です。デフォルト値は SortOrder.ASC です。

フィールドソート

indexSchema.indexSort.sorters[] の要素が FieldSort 型の場合、フィールド値で事前ソートします。この要素には次のパラメータが含まれます。

名前

説明

fieldName (必須)

String

事前ソートに使用されるフィールド。

order (オプション)

SortOrder

フィールドのソート順序。有効な値は SortOrder.ASCSortOrder.DESC です。デフォルト値は SortOrder.ASC です。

mode (オプション)

SortMode

多値フィールドのソート方法。

インデックスの事前ソートの設定

次の例では、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);