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

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

最終更新日:Sep 21, 2026

CreateSearchIndex API を使用して、データテーブルに 1 つ以上の検索インデックスを作成できます。検索インデックスを作成する際は、クエリ対象のフィールドをインデックスに追加する必要があります。また、ルーティングフィールドや事前ソートなどの詳細オプションを設定することもできます。

前提条件

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

  • データテーブルが作成されており、次の条件を満たしていること。詳細については、「データテーブルの作成」をご参照ください。

    • 最大バージョン数が 1 に設定されていること。

    • 生存時間 (TTL) が -1 に設定されているか、データテーブルに対して UpdateRow API が無効になっていること。

注意事項

  • 検索インデックス内のフィールドのデータ型は、データテーブル内のフィールドのデータ型と一致している必要があります。

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

パラメータ

検索インデックスを作成するには、テーブル名 (tableName)、インデックス名 (indexName)、インデックススキーマ (schema) を指定します。スキーマには、フィールドスキーマ (fieldSchemas)、インデックス設定 (indexSetting)、インデックス事前ソート設定 (indexSort) が含まれます。

パラメータ

説明

tableName

データテーブルの名前。

indexName

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

fieldSchemas

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

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

    検索インデックスのフィールドには、プライマリキー列または属性列を指定できます。

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

  • index (オプション):インデックスを有効にするかどうか。型:ブール型。

    デフォルト値:true。この場合、列の転置インデックスまたは空間インデックスが作成されます。false に設定すると、この列はインデックス作成の対象外となります。

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

  • analyzerParameter (オプション):トークナイザーのパラメータ設定。トークナイザーのタイプに基づいてパラメータを設定します。analyzer パラメータを設定する場合に必須です。

  • enableSortAndAgg (オプション):ソートと統計集計を有効にするかどうか。型:ブール型。

    enableSortAndAgg が true に設定されているフィールドのみがソートと統計集計が可能です。

    重要

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

  • isAnArray (オプション):フィールドが配列であるかどうか。型:ブール型。

    true に設定すると、列は配列になります。["a","b","c"] のような JSON 配列形式でデータを書き込みます。

    Nested タイプは本質的に配列であるため、fieldType が Nested の場合、このパラメータは不要です。

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

  • isVirtualField (オプション):フィールドが仮想列であるかどうか。型:ブール型。デフォルト値:false。仮想列を使用する場合は true に設定します。

  • sourceFieldName (オプション):データテーブル内のソースフィールドの名前。型:String。isVirtualField が true に設定されている場合は必須です。

  • dateFormats (オプション):日付形式。型:String。フィールドタイプが Date の場合は必須です。詳細については、「日付と時刻のデータ型」をご参照ください。

  • enableHighlighting (オプション):サマリーとハイライトを有効にするかどうか。型:ブール型。デフォルト値:false。この機能を有効にする場合は true に設定します。ハイライトは Text 型のフィールドでのみサポートされます。

    重要

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

  • vectorOptions (オプション):ベクトルフィールドのプロパティ。Vector 型のフィールドの場合に必須です。次のパラメータが含まれます。

    • dataType:ベクトルのデータ型。サポートされているのは float32 のみです。その他のデータ型要件については、チケットを送信してください。

    • dimension:ベクトルの次元数。最大:4,096。

    • metricType:ベクトルの距離測定アルゴリズム。サポートされているアルゴリズム:ユークリッド距離 (euclidean)、コサイン類似度 (cosine)、ドット積 (dot_product)。

      • ユークリッド距離 (euclidean):多次元空間における 2 つのベクトル間の直線距離を測定します。パフォーマンス上の理由から、Tablestore では最終的な平方根の計算がスキップされます。スコアが小さいほど類似度が高いことを示します。

      • コサイン類似度 (cosine):2 つのベクトル間の角度のコサインを測定します。スコアが高いほど類似度が高いことを示します。テキストデータに一般的に使用されます。

      • ドット積 (dot_product):同じ次元の 2 つのベクトルの対応する座標を乗算し、結果を合計します。スコアが高いほど類似度が高いことを示します。

      距離メトリックアルゴリズムの選択に関する詳細は、「距離メトリックアルゴリズム」をご参照ください。

indexSetting

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

routingFields (オプション):カスタムルーティングフィールド。一部のプライマリキー列をルーティングフィールドとして選択できます。ほとんどの場合、1 つだけ設定する必要があります。複数のルーティングキーを設定すると、システムはルーティングキーの値を連結して 1 つの値にします。

インデックスデータの書き込み時に、システムはルーティングフィールドの値に基づいてインデックスデータを分散します。同じルーティングフィールド値を持つレコードは、同じデータパーティションに格納されます。

indexSort

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

説明

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

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

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

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

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

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

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

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

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

timeToLive

オプション。データの生存時間 (TTL)。データ保持期間です。単位:秒。

デフォルト値:-1。この場合、データは期限切れになりません。最小 TTL 値は 86400 秒 (1 日) です。

データ保持期間が TTL を超えると、期限切れのデータは自動的にクリーンアップされます。

例

検索インデックスの作成とトークナイザー設定

次の例では、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: {// Nested 型のフィールドを含むインデックスでは indexSort はサポートされていません。事前ソートは行われません。
            //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: {// Nested 型のフィールドを含むインデックスでは indexSort はサポートされていません。事前ソートは行われません。
            //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);
});

よくある質問

関連ドキュメント