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

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

最終更新日:Dec 07, 2025

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

前提条件

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

  • 次の条件を満たすデータテーブルが作成済みであること:

    • バージョンの最大数が 1 であること。

    • 生存時間 (TTL) が -1 であるか、テーブルの更新が無効になっていること。

注意事項

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

  • 多次元インデックスに特定の TTL (-1 以外の値) を設定する場合、データテーブルの `UpdateRow` 書き込み機能を無効にする必要があります。多次元インデックスの TTL は、データテーブルの TTL 以下でなければなりません。詳細については、「ライフサイクル管理」をご参照ください。

パラメーター

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

コンポーネント

説明

table_name

データテーブルの名前。

index_name

多次元インデックスの名前。

field_schemas

`field_schema` オブジェクトのリスト。各 `field_schema` には次のパラメーターが含まれます:

  • field_name (必須):多次元インデックスに追加するフィールドの名前。これはカラム名です。型は String です。

    フィールドには、プライマリキー列または属性列を指定できます。

  • field_type (必須):フィールドのデータの型。型は `FieldType.XXX` です。

  • is_array (任意):フィールドが配列であるかどうかを指定します。型は Boolean です。

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

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

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

    デフォルト値は `True` で、カラムに対して転置インデックスまたは空間インデックスが作成されることを意味します。これを `False` に設定すると、カラムのインデックスは作成されません。

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

  • enable_sort_and_agg (任意):ソートと統計集約を有効にするかどうかを指定します。型は Boolean です。

    ソートには、`enable_sort_and_agg` が `True` に設定されているフィールドのみを使用できます。

    重要

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

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

  • is_virtual_field (任意):フィールドが仮想カラムであるかどうかを指定します。型は Boolean です。デフォルト値は `False` です。仮想カラムを使用するには、このパラメーターを `True` に設定します。

  • source_field_name (任意):データテーブル内のフィールドの名前。型は String です。

    重要

    このパラメーターは、`is_virtual_field` が `True` に設定されている場合に必須です。

  • date_formats (任意):日付フォーマット。型は String です。詳細については、「日時型」をご参照ください。

    重要

    このパラメーターは、フィールドタイプが Date の場合に必須です。

  • enable_highlighting (任意):まとめとハイライト機能を有効にするかどうかを指定します。型は Boolean です。デフォルト値は `False` です。まとめとハイライトを使用するには、このパラメーターを `True` に設定します。Text フィールドのみがこの機能をサポートしています。

    重要

    Tablestore Python SDK は、バージョン 6.0.0 以降でこの機能をサポートしています。

  • vector_options (任意):ベクトルフィールドのプロパティパラメーター。このパラメーターは、フィールドタイプが Vector の場合に必須です。次の内容が含まれます:

    • data_type:ベクトルのデータの型。現在、float32 のみがサポートされています。他の型が必要な場合は、チケットを送信してお問い合わせください。

    • dimension:ベクトルディメンション。ベクトルフィールドでサポートされる最大ディメンション数は 4096 です。

    • metric_type:ベクトル間の距離を測定するために使用されるアルゴリズム。サポートされているアルゴリズムには、ユークリッド距離 (euclidean)、コサイン類似度 (cosine)、およびドット積 (dot_product) があります。

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

      • コサイン類似度 (cosine):ベクトル空間における 2 つのベクトル間の角度のコサイン。コサイン類似度のスコアが高いほど、2 つのベクトル間の類似度が高いことを示します。これは、テキストデータの類似度を計算するためによく使用されます。

      • ドット積 (dot_product):同じディメンションの 2 つのベクトルの対応する座標を乗算し、その結果を加算します。ドット積のスコアが高いほど、2 つのベクトル間の類似度が高いことを示します。

      距離計算アルゴリズムの選択に関する詳細については、「距離計算アルゴリズム」をご参照ください。

  • json_type (任意):JSON データのインデックスタイプ。OBJECT と NESTED がサポートされています。このパラメーターは、フィールドタイプが JSON の場合に必須です。

index_setting

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

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

index_sort

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

説明

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

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

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

    sort_order:ソート順。昇順 (`SortOrder.ASC`) または降順でソートできます。デフォルトは昇順です。

  • FieldSort はフィールド値でデータをソートし、次の設定を含みます:

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

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

    • sort_order:ソート順。昇順 (`SortOrder.ASC`) または降順でソートできます。デフォルトは昇順です。

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

多次元インデックス作成時にアナライザを指定する

次の例では、多次元インデックスを作成する際にアナライザを指定する方法を示します。多次元インデックスには、k (Keyword)、t (Text)、g (Geopoint)、ka (Keyword 配列)、la (Long 配列)、n (Nested) の 6 つのフィールドが含まれています。n フィールドには、nk (Keyword)、nl (Long)、nt (Text) の 3 つのサブフィールドがあります。

def create_search_index(client):
    # Keyword フィールド。インデックスを作成し、統計集約を有効にします。
    field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
    # Text フィールド。インデックスを作成し、1文字トークン化を使用します。
    field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD)
    # Text フィールド。インデックスを作成し、あいまいトークン化を使用します。
    #field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.FUZZY,analyzer_parameter=FuzzyAnalyzerParameter(1, 6))
    # Text フィールド。インデックスを作成し、カスタム区切り文字 (カンマ) を使用してトークン化します。
    #field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SPLIT, analyzer_parameter = SplitAnalyzerParameter(","))
    # Geopoint フィールド。インデックスを作成します。
    field_c = FieldSchema('g', FieldType.GEOPOINT, index=True)
    # Keyword 配列フィールド。インデックスを作成します。
    field_d = FieldSchema('ka', FieldType.KEYWORD, index=True, is_array=True)
    # Long 配列フィールド。インデックスを作成します。
    field_e = FieldSchema('la', FieldType.LONG, index=True, is_array=True)

    # 3 つのサブフィールド (nk (Keyword)、nl (Long)、nt (Text)) を含む Nested フィールド。
    field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
        FieldSchema('nk', FieldType.KEYWORD, index=True),
        FieldSchema('nl', FieldType.LONG, index=True),
        FieldSchema('nt', FieldType.TEXT, index=True),
    ])

    fields = [field_a, field_b, field_c, field_d, field_e, field_n]

    index_setting = IndexSetting(routing_fields=['PK1']) 
    index_sort = None # 多次元インデックスに Nested フィールドが含まれている場合、インデックスの事前ソートは設定できません。
    #index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
    index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
    client.create_search_index('<TABLE_NAME>', '<SEARCH_INDEX_NAME>', index_meta)

多次元インデックスを作成し、ベクトルフィールドを設定する

次の例では、多次元インデックスを作成する方法を示します。多次元インデックスには、col_keyword (Keyword)、col_long (Long)、col_vector (Vector) の 3 つのフィールドが含まれています。ベクトルフィールドの距離計算アルゴリズムはドット積です。

def create_search_index(client):
    index_meta = SearchIndexMeta([
        FieldSchema('col_keyword', FieldType.KEYWORD, index=True, enable_sort_and_agg=True),  # 文字列型
        FieldSchema('col_long', FieldType.LONG, index=True),  # 数値型
        FieldSchema("col_vector", FieldType.VECTOR,  # ベクトル型
                    vector_options=VectorOptions(
                        data_type=VectorDataType.VD_FLOAT_32,
                        dimension=4,  # ベクトルディメンションは 4 で、類似度アルゴリズムはドット積です。
                        metric_type=VectorMetricType.VM_DOT_PRODUCT
                    )),

    ])
    client.create_search_index(table_name, index_name, index_meta)

多次元インデックス作成時にまとめとハイライトを有効にする

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

def create_search_index0905(client):
    # Keyword フィールド。インデックスを作成し、統計集約を有効にします。
    field_a = FieldSchema('k', FieldType.KEYWORD, index=True, enable_sort_and_agg=True)
    # Text フィールド。インデックスを作成し、1文字トークン化を使用し、フィールドのまとめとハイライトを有効にします。
    field_b = FieldSchema('t', FieldType.TEXT, index=True, analyzer=AnalyzerType.SINGLEWORD,
                        enable_highlighting=True)

    # 3 つのサブフィールド (nk (Keyword)、nl (Long)、nt (Text)) を含む Nested フィールド。nt サブカラムでまとめとハイライト機能が有効になっています。
    field_n = FieldSchema('n', FieldType.NESTED, sub_field_schemas=[
        FieldSchema('nk', FieldType.KEYWORD, index=True),
        FieldSchema('nl', FieldType.LONG, index=True),
        FieldSchema('nt', FieldType.TEXT, index=True, enable_highlighting=True),
    ])

    fields = [field_a, field_b, field_n]

    index_setting = IndexSetting(routing_fields=['id'])
    index_sort = None  # 多次元インデックスに Nested フィールドが含まれている場合、インデックスの事前ソートは設定できません。
    # index_sort = Sort(sorters=[PrimaryKeySort(SortOrder.ASC)])
    index_meta = SearchIndexMeta(fields, index_setting=index_setting, index_sort=index_sort)
    client.create_search_index('pythontest', 'pythontest_0905', index_meta)

よくある質問

関連ドキュメント