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

Tablestore:多次元インデックスの作成

最終更新日:Nov 30, 2025

`CreateSearchIndex` メソッドを使用して、データテーブルの多次元インデックスを作成できます。1 つのデータテーブルに複数の多次元インデックスを作成できます。多次元インデックスを作成する際は、クエリ対象のフィールドをインデックスに追加する必要があります。また、カスタムルートや事前ソートなどの高度なオプションも設定できます。

前提条件

  • Tablestore クライアントが初期化されていること。詳細については、「Tablestore クライアントの初期化」をご参照ください。

  • データテーブルが作成されていること。テーブルの `max versions` は 1、`time to live` は -1 である必要があります。詳細については、「データテーブルの作成」をご参照ください。

注意事項

多次元インデックスを作成する際、多次元インデックス内のフィールドのデータの型は、データテーブル内の対応するフィールドのデータの型と一致している必要があります。

API

/**
 * 多次元インデックスを作成します。
 * @api
 *
 * @param [] $request
 *            テーブル名やインデックス設定などのリクエストパラメーター。
 * @return [] 応答。
 * @throws OTSClientException パラメーターチェックに失敗した場合、またはサーバーが検証エラーを返した場合にスローされます。
 * @throws OTSServerException Tablestore サーバーがエラーを返した場合にスローされます。
 * @example "src/examples/CreateSearchIndex.php"
 */
public function createSearchIndex(array $request)

パラメータ

多次元インデックスを作成する際は、テーブル名 (`table_name`)、多次元インデックス名 (`index_name`)、およびインデックススキーマ (`schema`) を指定する必要があります。スキーマには、`field_schemas` (すべてのインデックスフィールドの設定)、`index_setting` (インデックス設定)、および `index_sort` (インデックスの事前ソート設定) が含まれます。次の表にパラメーターを示します。

パラメータ

説明

table_name

データテーブルの名前。

index_name

サーチインデックスの名前。

field_schemas

フィールドスキーマのリスト。各 `field_schema` には、次のパラメーターが含まれます:

  • field_name (必須):インデックスを作成するフィールドの名前。これは列名です。データの型は String です。

    多次元インデックスのフィールドは、プライマリキー列または属性列にすることができます。

  • field_type (必須):フィールドのデータの型。`FieldTypeConst::XXX` 形式で指定します。

  • is_array (任意):列が配列であるかどうかを指定します。データの型はブール値です。

    true に設定すると、列は配列になります。列に書き込まれるデータは、`["a","b","c"]` のような JSON 配列フォーマットである必要があります。

    Nested 型は配列です。`field_type` が Nested の場合、このパラメーターを設定する必要はありません。

  • index (任意):列のインデックスを作成するかどうかを指定します。データの型はブール値です。

    デフォルト値は true です。これは、列に対して転置インデックスまたは空間インデックスが構築されることを意味します。false に設定すると、列のインデックスは構築されません。

  • analyzer (任意):トークン化のタイプ。フィールドの型が Text の場合、このパラメーターを設定できます。それ以外の場合、デフォルトのトークン化タイプは単語トークン化です。

  • enable_sort_and_agg (任意):ソートと統計的集計を有効にするかどうかを指定します。データの型はブール値です。

    `enable_sort_and_agg` が true に設定されている場合にのみ、フィールドでソートを実行できます。

    重要

    Nested 型のフィールドは、ソートと統計的集計をサポートしていません。ただし、Nested 型フィールド内のサブ列はこの機能をサポートしています。

index_setting

インデックス設定。`routing_fields` 設定が含まれます。

routing_fields (任意):カスタムルーティングフィールド。一部のプライマリキー列をルーティングフィールドとして選択できます。ほとんどの場合、1 つだけ設定すれば十分です。複数のルーティングキーを設定した場合、システムはそれらの値を連結して単一の値にします。

index_sort

インデックスの事前ソート設定。`sorters` 設定が含まれます。これが設定されていない場合、データはデフォルトでプライマリキーによってソートされます。

説明

Nested 型のフィールドを含むインデックスは `index_sort` をサポートしておらず、事前ソートされません。

sorters (必須):このパラメーターは、多次元インデックスの事前ソート方法を指定します。PrimaryKeySort と FieldSort がサポートされています。詳細については、「ソートとページング」をご参照ください。

  • PrimaryKeySort:プライマリキーでデータをソートします。次の設定が含まれます:

    order:ソート順。データは昇順または降順でソートできます。デフォルトは昇順 (`SortOrderConst::SORT_ORDER_ASC`) です。

  • FieldSort:フィールド値でデータをソートします。次の設定が含まれます:

    インデックスが作成され、ソートと統計的集計が有効になっているフィールドのみが事前ソートできます。

    • field_name:ソートの基準となるフィールドの名前。

    • order:ソート順。データは昇順または降順でソートできます。デフォルトは昇順 (`SortOrderConst::SORT_ORDER_ASC`) です。

    • mode:フィールドに複数の値がある場合に使用するソート方法。

次のサンプルコードは、多次元インデックスを作成する方法を示しています。この例では、多次元インデックスは、Keyword 型のキーワード列、Text 型のテキスト列、Geo-point 型のジオ列、Long 型の long 列、Double 型の double 列、Boolean 型のブール列、Keyword 型の配列列、および Nested 型のネスト列で構成されています。ネスト列には、Keyword 型の `nested_keyword` サブ列が含まれています。多次元インデックス内のデータは、データテーブルのプライマリキーに基づいて事前ソートされ、有効期限が切れないように設定されています。

$request = array(
    'table_name' => 'php_sdk_test',
    'index_name' => 'php_sdk_test_search_index',
    'schema' => array(
        'field_schemas' => array(
            array(
                'field_name' => 'keyword',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'text',
                'field_type' => FieldTypeConst::TEXT,
                'analyzer' => 'single_word',
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => false
            ),
            array(
                'field_name' => 'geo',
                'field_type' => FieldTypeConst::GEO_POINT,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'long',
                'field_type' => FieldTypeConst::LONG,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'double',
                'field_type' => FieldTypeConst::DOUBLE,
                'index' => true,
                'enable_sort_and_agg' => true,
                'is_array' => false
            ),
            array(
                'field_name' => 'boolean',
                'field_type' => FieldTypeConst::BOOLEAN,
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => false
            ),
            array(
                'field_name' => 'array',
                'field_type' => FieldTypeConst::KEYWORD,
                'index' => true,
                'enable_sort_and_agg' => false,
                'is_array' => true
            ),
            array(
                'field_name' => 'nested',
                'field_type' => FieldTypeConst::NESTED,
                'index' => false,
                'enable_sort_and_agg' => false,
                'field_schemas' => array(
                    array(
                        'field_name' => 'nested_keyword',
                        'field_type' => FieldTypeConst::KEYWORD,
                        'index' => false,
                        'enable_sort_and_agg' => false,
                        'is_array' => false
                    )
                )
            ),
        ),
        'index_setting' => array(
            'routing_fields' => array("pk1")
        ),
//        "index_sort" => array(// Nested 型のフィールドを含むインデックスは index_sort をサポートしておらず、事前ソートされません。
//            array(
//                'field_sort' => array(
//                    'field_name' => 'keyword',
//                    'order' => SortOrderConst::SORT_ORDER_ASC,
//                    'mode' => SortModeConst::SORT_MODE_AVG,
//                )
//            ),
//            array(
//                'pk_sort' => array(
//                    'order' => SortOrderConst::SORT_ORDER_ASC
//                )
//            ),
//        )
    )
);
$response = $otsClient->createSearchIndex($request);

FAQ

関連ドキュメント