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

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

最終更新日:May 07, 2025

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

前提条件

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

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

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

    • TTL(Time To Live)が -1 に設定されているか、データテーブルの更新が禁止されていること。

考慮事項

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

パラメータ

検索インデックスを作成する際は、テーブル名(TableName)、検索インデックス名(IndexName)、およびインデックス構造情報(IndexSchema)を指定する必要があります。 IndexSchema には、FieldSchemas(インデックス内のすべてのフィールドの設定)、IndexSetting(インデックス設定)、および IndexSort(インデックスの事前ソート設定)が含まれます。 次の表にパラメータを示します。

パラメータ

説明

TableName

テーブルの名前。

IndexName

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

FieldSchemas

フィールドスキーマのリスト。 各フィールドスキーマでは、以下のパラメータを構成します。

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

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

  • FieldType(必須): フィールドの データ型。 型:FieldType.XXX。

  • Array(オプション): 値が配列かどうかを指定します。 型:Boolean。

    このパラメータを true に設定すると、フィールドはデータを配列として保存します。 フィールドに書き込まれるデータは JSON 配列である必要があります。 例:["a","b","c"]。

    ネストされた値は配列です。 FieldType を Nested に設定した場合は、このパラメータをスキップします。

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

    デフォルト値:true。 true の値は、Tablestore が転置インデックススキーマまたは時空間インデックススキーマを使用してフィールドにインデックスを作成することを指定します。 false の値は、Tablestore がフィールドのインデックス作成を有効にしないことを指定します。

  • Analyzer(オプション): トークナイザ の種類。 FieldType パラメータを Text に設定した場合、このパラメータを構成できます。 このパラメータを構成しない場合は、デフォルトのアナライザタイプである文字トークン化が使用されます。

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

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

    重要

    Nested 型のフィールドは、ソートおよび集約機能をサポートしていません。 Nested 型のフィールドのサブカラムは、ソートおよび集約機能をサポートしています。

  • Store(オプション): フィールドの値を検索インデックスに保存するかどうかを指定します。 型:Boolean。

    Store を true に設定すると、データテーブルをクエリすることなく、検索インデックスからフィールドの値を読み取ることができます。 これにより、クエリのパフォーマンスが向上します。

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

  • SourceFieldNames(オプション): データテーブル内で仮想カラムがマッピングされるソースフィールドの名前を指定します。 型:String。

    重要

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

  • DateFormats(オプション): 日付の形式。 型:String。 詳細については、「日付と時刻の型」をご参照ください。

    重要

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

IndexSetting

検索インデックスの設定。RoutingFields パラメータの設定を含みます。

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

Tablestore は、指定されたルートフィールドに基づいて、検索インデックスに書き込まれたデータを異なるパーティションに分散します。 同じルートフィールド値を持つデータは、同じパーティションに分散されます。

IndexSort

検索インデックスの事前ソート設定。Sorters パラメータの設定を含みます。 IndexSort パラメータを空のままにすると、フィールド値はプライマリキーでソートされます。

説明

Nested 型のフィールドを含む検索インデックスの事前ソート設定はスキップできます。

Sorters(必須): 検索インデックスの事前ソート方法。 PrimaryKeySort と FieldSort がサポートされています。 ソートの詳細については、「ソートとページング」をご参照ください。

  • PrimaryKeySort: プライマリキーでデータをソートします。 PrimaryKeySort には、以下のパラメータを指定できます。

    Order: ソート順。昇順または降順を指定できます。 デフォルト値:昇順(DataModel.Search.Sort.SortOrder.ASC)。

  • FieldSort: フィールド値でデータをソートします。 FieldSort には、以下のパラメータを指定できます。

    インデックスが作成され、EnableSortAndAgg パラメータが true に設定されているフィールドのみ、事前ソートできます。

    • FieldName: データのソートに使用する値を持つ列の名前。

    • Order: ソート順。昇順または降順を指定できます。 デフォルト値:昇順(DataModel.Search.Sort.SortOrder.ASC)。

    • Mode: フィールドに複数の値が含まれている場合に使用するソート方法。

TimeToLive

検索インデックス内のデータの保持期間。 単位:秒。 このパラメータはオプションです。 デフォルト値:-1。

TTL は 86,400 秒(1 日)以上または -1 である必要があります。 -1 の値は、データの有効期限が切れないことを指定します。

検索インデックス内のデータの保持期間が検索インデックスの TTL 値を超えると、Tablestore は自動的にデータを削除します。

デフォルト構成を使用して検索インデックスを作成する

次のサンプルコードは、検索インデックスを作成する方法の例を示しています。 検索インデックスには、Keyword_type_col(Keyword 型)、Long_type_col(Long 型)、および Text_type_col(TEXT 型)の 3 つの列が含まれています。 ソートおよび集約機能が有効になっています。

/// <summary>
/// Keyword_type_col、Long_type_col、および Text_type_col 属性列を含む検索インデックスを作成します。Keyword_type_col のデータ型を Keyword、Long_type_col のデータ型を Long、Text_type_col のデータ型を Text に設定します。
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    // テーブルと検索インデックスの名前を指定します。
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col,FieldType.KEYWORD){ // フィールド名とフィールド型を設定します。
            index =true, // インデックス作成を有効にします。
            EnableSortAndAgg =true // ソートと集約を有効にします。
        },
        new FieldSchema(Long_type_col,FieldType.LONG){ index=true,EnableSortAndAgg=true},
        new FieldSchema(Text_type_col,FieldType.TEXT){ index=true}
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas
    };
    // クライアントを呼び出して検索インデックスを作成します。
    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("検索インデックスが作成されました: " + IndexName);
}

IndexSort を指定して検索インデックスを作成する

次のサンプルコードは、検索インデックスを作成する方法の例を示しています。 検索インデックスには、Keyword_type_col、Long_type_col、および Text_type_col の 3 つの列が含まれています。 列のデータ型は、文字列(Keyword)、整数(Long)、およびトークン化された文字列(TEXT)に設定されています。 検索インデックスは、Long_type_col 列でデータを事前ソートするように構成されています。

/// <summary>
/// Keyword_type_col、Long_type_col、および Text_type_col 属性列を含む検索インデックスを作成します。Keyword_type_col のデータ型を Keyword、Long_type_col のデータ型を Long、Text_type_col のデータ型を Text に設定します。
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndexWithIndexSort(OTSClient otsClient)
{
    // テーブルと検索インデックスの名前を指定します。
    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    List<FieldSchema> FieldSchemas = new List<FieldSchema>() {
        new FieldSchema(Keyword_type_col,FieldType.KEYWORD){ // フィールド名とフィールド型を設定します。
            index =true, // インデックス作成を有効にします。
            EnableSortAndAgg =true // ソートと集約を有効にします。
        },
        new FieldSchema(Long_type_col,FieldType.LONG){ index=true,EnableSortAndAgg=true},
        new FieldSchema(Text_type_col,FieldType.TEXT){ index=true}
    };
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = FieldSchemas,
        // Long_type_col 列でデータを事前ソートします。Long_type_col 列にインデックスを作成し、列のソートと集約を有効にする必要があります。
        IndexSort = new DataModel.Search.Sort.Sort()
        {
            Sorters = new List<DataModel.Search.Sort.ISorter>
            {
                new DataModel.Search.Sort.FieldSort(Long_type_col, DataModel.Search.Sort.SortOrder.ASC)
            }
        }
    };

    CreateSearchIndexResponse response = otsClient.CreateSearchIndex(request);
    Console.WriteLine("検索インデックスが作成されました: " + IndexName);
}

日付列と仮想カラムを含む検索インデックスを作成する

次のサンプルコードは、検索インデックスを作成する方法の例を示しています。 検索インデックスには、pk0(Keyword 型)、pk1(Long 型)、date_col(Date 型)、geo_col(Geo-Point 型)、および col0_v1(Text 型)フィールドが含まれています。 col0_v1 仮想カラムは col0 ソースカラムにマッピングされています。 結果は pk1 列で昇順にソートされます。

/// <summary>
/// 日付列と仮想カラムを含む検索インデックスを作成します。
/// </summary>
/// <param name="otsClient"></param>
public static void CreateSearchIndex(OTSClient otsClient)
{
    List<FieldSchema> fieldSchemas = new List<FieldSchema> {
        new FieldSchema("pk0", FieldType.KEYWORD)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("pk1", FieldType.LONG)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("date_col", FieldType.DATE)
        {
            index = true,
            DateFormats = new List<string>(){
                "yyyy-MM-dd'T'HH:mm:ss.SSSSSS",
                "yyyy-MM-dd'T'HH:mm:ss.SSS"
            }
        },

        new FieldSchema("geo_col", FieldType.GEO_POINT)
        {
            index = true,
            EnableSortAndAgg = true
        },

        new FieldSchema("col0_v1", FieldType.TEXT)
        {
            index = true,
            Analyzer = Analyzer.Split,
            AnalyzerParameter = new SingleWordAnalyzerParameter(true, true),
            IsVirtualField = true,
            SourceFieldNames = new List<string> { "col0" }
        },
    };

    CreateSearchIndexRequest request = new CreateSearchIndexRequest(TableName, IndexName);
    request.IndexSchame = new IndexSchema()
    {
        FieldSchemas = fieldSchemas,
        IndexSort = new Sort(new List<ISorter> { new FieldSort("pk1", SortOrder.ASC) })
    };
    request.TimeToLive = -1;

    otsClient.CreateSearchIndex(request);
}

FAQ

関連情報