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

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

最終更新日:Nov 30, 2025

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

前提条件

  • Tablestore クライアントを初期化します。詳細については、「Tablestore クライアントの初期化」をご参照ください。

  • 次の条件を満たすデータテーブルを作成します。詳細については、「データテーブルの作成」をご参照ください。

    • バージョンの最大数は 1 である必要があります。

    • 生存時間 (TTL) は -1 であるか、データテーブルの更新が無効になっている必要があります。

注意事項

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

  • 多次元インデックスの TTL を -1 以外の値に設定するには、データテーブルの UpdateRow 操作を無効にする必要があります。多次元インデックスの TTL は、データテーブルの TTL 以下である必要があります。詳細については、「ライフサイクル管理」をご参照ください。

パラメーター

多次元インデックスを作成するときは、テーブル名 (tableName)、インデックス名 (indexName)、およびインデックススキーマ (schema) を指定する必要があります。スキーマには、フィールドスキーマ (fieldSchemas)、インデックス設定 (indexSetting)、およびインデックス事前ソート設定 (indexSort) が含まれます。次の表に、これらのパラメーターを説明します。

パラメーター

説明

tableName

データテーブルの名前。

indexName

検索インデックスの名前。

fieldSchemas

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

  • fieldName (必須):インデックスを作成するフィールドの名前 (カラム名)。型:String。

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

  • fieldType (必須):フィールドのデータの型。このパラメーターを TableStore.FieldType.XXX に設定します。

  • index (オプション):インデックス作成を有効にするかどうかを指定します。型:Boolean。

    デフォルト値は true です。この値は、カラムに対して転置インデックスまたは空間インデックスが作成されることを示します。このパラメーターを false に設定した場合、カラムに対してインデックスは作成されません。

  • analyzer (オプション):トークナイザのタイプ。このパラメーターは、フィールドタイプが Text の場合に設定できます。このパラメーターを設定しない場合、デフォルトの文字トークン化が使用されます。

  • analyzerParameter (オプション):トークナイザのパラメーター設定。トークナイザのタイプに基づいてパラメーターを設定します。フィールドに analyzer パラメーターを設定する場合は、このパラメーターを設定する必要があります。

  • enableSortAndAgg (オプション):ソートと統計的集約を有効にするかどうかを指定します。型:Boolean。

    ソートできるのは、enableSortAndAgg が true に設定されているフィールドのみです。

    重要

    Nested フィールドはソートと統計的集約をサポートしていません。ただし、Nested フィールド内のサブカラムはソートと統計的集約をサポートしています。

  • isAnArray (オプション):フィールドが配列であるかどうかを指定します。型:Boolean。

    このパラメーターを true に設定すると、カラムは配列になります。データを書き込むときは、["a","b","c"] のような JSON 配列形式である必要があります。

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

  • fieldSchemas (オプション):フィールドタイプが Nested の場合、このパラメーターを使用して、ネストされたドキュメント内のサブカラムのインデックスタイプを設定します。タイプはフィールドスキーマのリストです。

  • isVirtualField (オプション):フィールドが仮想カラムであるかどうかを指定します。型:Boolean。デフォルト値は false です。仮想カラムを使用するには、このパラメーターを true に設定します。

  • sourceFieldName (オプション):データテーブル内のフィールドの名前。型:String。isVirtualField を true に設定した場合は、このパラメーターを設定する必要があります。

  • dateFormats (オプション):日付のフォーマット。型:String。フィールドタイプが Date の場合は、このパラメーターを設定する必要があります。詳細については、「日付と時刻のデータの型」をご参照ください。

  • enableHighlighting (オプション):まとめとハイライトを有効にするかどうかを指定します。型:Boolean。デフォルト値は false で、まとめとハイライトは無効になります。まとめとハイライトを使用するには、このパラメーターを true に設定します。Text フィールドのみがこの機能をサポートします。

    重要

    この機能は、Tablestore SDK for Node.js 5.5.0 以降でサポートされています。

  • vectorOptions:このパラメーターはオプションで、Vector フィールドのプロパティを指定します。fieldType パラメーターを Vector に設定した場合は、このパラメーターを設定する必要があります。次のパラメーターを使用して、Vector フィールドのプロパティを指定できます:

    • dataType:ベクトルデータの型。float32 のみがサポートされています。他の型のベクトルデータを使用したい場合は、してください

    • dimension:ベクトルのディメンション数。Vector フィールドの最大ディメンション数は 4,096 です。

    • metricType:ベクトル間の距離を測定するために使用するアルゴリズム。有効な値:euclidean、cosine、dot_product。

      • euclidean:ユークリッド距離アルゴリズムは、多次元空間における 2 つのベクトル間の最短経路を測定します。パフォーマンスを向上させるため、Tablestore のユークリッド距離アルゴリズムは最終的な平方根の計算を実行しません。ユークリッド距離アルゴリズムを使用して得られた値が大きいほど、2 つのベクトル間の類似度が高いことを示します。

      • cosine:コサイン類似度アルゴリズムは、ベクトル空間における 2 つのベクトル間の角度のコサインを計算します。コサイン類似度アルゴリズムを使用して得られた値が大きいほど、2 つのベクトル間の類似度が高いことを示します。ほとんどの場合、このアルゴリズムはテキストデータ間の類似度を計算するために使用されます。

      • dot_product:ドット積アルゴリズムは、同じディメンションの 2 つのベクトルの対応する座標を乗算し、その積を加算します。ドット積アルゴリズムを使用して得られた値が大きいほど、2 つのベクトル間の類似度が高いことを示します。

      詳細については、「付録:ベクトルの距離測定アルゴリズム」をご参照ください。

indexSetting

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

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

indexSort

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

説明

indexSort は、Nested フィールドを含むインデックスではサポートされていません。事前ソートは実行されません。

sorters (必須):インデックスの事前ソートメソッド。プライマリキーまたはフィールド値でソートできます。ソートの詳細については、「ソートとページング」をご参照ください。

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

    order:ソート順。昇順または降順でソートできます。デフォルトは昇順 (TableStore.SortOrder.SORT_ORDER_ASC) です。

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

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

    • fieldName:ソート対象のフィールド名。

    • order:ソート順。昇順または降順でソートできます。デフォルトは昇順 (TableStore.SortOrder.SORT_ORDER_ASC) です。

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

timeToLive

多次元インデックスの作成とトークナイザの設定

次の例では、多次元インデックスを作成する方法を示します。このインデックスには、pic_id (Keyword)、count (Long)、time_stamp (Long)、pic_description (Text)、col_vector (Vector)、pos (Geo-point)、pic_tag (Nested)、date (Date)、analyzer_single_word (Text)、analyzer_split (Text)、analyzer_fuzzy (Text) の各カラムが含まれます。pic_tag カラムには、sub_tag_name (Keyword) と tag_name (Keyword) の 2 つのサブフィールドが含まれます。analyzer_single_word カラムは文字トークン化を使用します。analyzer_split カラムはデリミタトークン化を使用します。analyzer_fuzzy カラムはあいまいトークン化を使用します。

client.createSearchIndex({
    tableName: "<TABLE_NAME>", // テーブル名を設定します。
    indexName: "<INDEX_NAME>", // 多次元インデックス名を設定します。
    schema: {
        fieldSchemas: [
            {
                fieldName: "pic_id",
                fieldType: TableStore.FieldType.KEYWORD, // フィールド名とフィールドタイプを設定します。
                index: true, // インデックス作成を有効にします。
                enableSortAndAgg: true, // ソートと集約を有効にします。
                isAnArray: false
            },
            {
                fieldName: "count",
                fieldType: TableStore.FieldType.LONG,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false
            },
            {
                fieldName: "time_stamp",
                fieldType: TableStore.FieldType.LONG,
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
            },
            {
                fieldName: "pic_description",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
            },
            {
                fieldName: "col_vector",
                fieldType: TableStore.FieldType.VECTOR,
                index: true,
                isAnArray: false,
                vectorOptions: {
                    dataType: TableStore.VectorDataType.VD_FLOAT_32,
                    dimension: 4,
                    metricType: TableStore.VectorMetricType.VM_COSINE,
                }
            },
            {
                fieldName: "pos",
                fieldType: TableStore.FieldType.GEO_POINT,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false,
            },
            {
                fieldName: "pic_tag",
                fieldType: TableStore.FieldType.NESTED,
                index: false,
                enableSortAndAgg: false,
                fieldSchemas: [
                    {
                        fieldName: "sub_tag_name",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "tag_name",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    }
                ]
            },
            {
                fieldName: "date",
                fieldType: TableStore.FieldType.DATE,
                index: true,
                enableSortAndAgg: true,
                isAnArray: false,
                dateFormats: ["yyyy-MM-dd'T'HH:mm:ss.SSSSSS"],
            },
            {
                fieldName: "analyzer_single_word",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "single_word",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    caseSensitive: true,
                    delimitWord: false,
                }
            },
            {
                fieldName: "analyzer_split",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "split",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    delimiter: ",",
                }
            },
            {
                fieldName: "analyzer_fuzzy",
                fieldType: TableStore.FieldType.TEXT,
                analyzer: "fuzzy",
                index: true,
                enableSortAndAgg: false,
                isAnArray: false,
                analyzerParameter: {
                    minChars: 1,
                    maxChars: 5,
                }
            },
        ],
        indexSetting: { // インデックスの設定オプション。
            "routingFields": ["count", "pic_id"], // プライマリキー列のみをルートフィールドとして設定できます。
            "routingPartitionSize": null
        },
        //indexSort: {// indexSort は、Nested フィールドを含むインデックスではサポートされていません。事前ソートは実行されません。
            //sorters: [
                // { // indexSort を設定しない場合、データはデフォルトでプライマリキーの昇順でソートされます。
                //     primaryKeySort: {
                //         order: TableStore.SortOrder.SORT_ORDER_ASC
                //     }
                // },
                //{
                //   fieldSort: {
                //        fieldName: "Col_Keyword",
                //        order: TableStore.SortOrder.SORT_ORDER_DESC // indexSort のソート順を設定します。
                //    }
                //}
            //]
        //},
        timeToLive: 1000000, // 単位:秒。
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:',data);
});

多次元インデックスの作成とハイライトの有効化

次の例では、多次元インデックスを作成する際にハイライトを有効にする方法を示します。このインデックスには、k (Keyword)、t (Text)、n (Nested) の 3 つのフィールドが含まれます。n フィールドには、nk (Keyword)、nl (Long)、nt (Text) の 3 つのサブフィールドが含まれます。ハイライト機能は、t フィールドと nt サブフィールドで有効になっています。

client.createSearchIndex({
    tableName: "<TABLE_NAME>", // テーブル名を設定します。
    indexName: "<SEARCH_INDEX_NAME>", // 多次元インデックス名を設定します。
    schema: {
        fieldSchemas: [
            {
                fieldName: "k",
                fieldType: TableStore.FieldType.KEYWORD, // フィールド名とフィールドタイプを設定します。
                index: true, // インデックス作成を有効にします。
                enableSortAndAgg: true, // ソートと集約を有効にします。
                isAnArray: false
            },
            {
                fieldName: "t",
                fieldType: TableStore.FieldType.TEXT,
                index: true,
                enableSortAndAgg: false,
                enableHighlighting: true, // フィールドのハイライトを有効にします。
                isAnArray: false,
            },
            {
                fieldName: "n",
                fieldType: TableStore.FieldType.NESTED,
                index: false,
                enableSortAndAgg: false,
                fieldSchemas: [
                    {
                        fieldName: "nk",
                        fieldType: TableStore.FieldType.KEYWORD,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "nl",
                        fieldType: TableStore.FieldType.LONG,
                        index: true,
                        enableSortAndAgg: true,
                    },
                    {
                        fieldName: "nt",
                        fieldType: TableStore.FieldType.TEXT,
                        index: true,
                        enableSortAndAgg: false,
                        enableHighlighting: true, // フィールドのハイライトを有効にします。
                    },
                ]
            },
        ],
        indexSetting: { // インデックスの設定オプション。
            "routingFields": ["id"], // プライマリキー列のみをルートフィールドとして設定できます。
            "routingPartitionSize": null
        },
        //indexSort: {// indexSort は、Nested フィールドを含むインデックスではサポートされていません。事前ソートは実行されません。
            //sorters: [
                // { // indexSort を設定しない場合、データはデフォルトでプライマリキーの昇順でソートされます。
                //     primaryKeySort: {
                //         order: TableStore.SortOrder.SORT_ORDER_ASC
                //     }
                // },
                //{
                //   fieldSort: {
                //        fieldName: "Col_Keyword",
                //        order: TableStore.SortOrder.SORT_ORDER_DESC // indexSort のソート順を設定します。
                //    }
                //}
            //]
        //},
        timeToLive: 1000000, // 単位:秒。
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:',data);
});

よくある質問

関連ドキュメント