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

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

最終更新日:Dec 28, 2024

CreateSearchIndex オペレーションを呼び出して、データテーブルに 1 つ以上の検索インデックスを作成できます。検索インデックスを作成する際に、クエリ対象のフィールドを検索インデックスに追加し、検索インデックスの詳細設定を構成できます。たとえば、ルーティングキーと事前ソート設定を構成できます。

前提条件

  • OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。

  • データテーブルが作成されていること。データテーブルの TimeToLive パラメータは -1 に設定され、MaxVersions パラメータは 1 に設定されています。

使用方法

検索インデックス内のフィールドのデータ型は、検索インデックスが作成されるデータテーブル内のフィールドのデータ型と一致している必要があります。詳細については、データ型のマッピングを参照してください。

パラメータ

検索インデックスを作成する際は、TableName、IndexName、および IndexSchema パラメータを構成する必要があります。また、IndexSchema パラメータ内で FieldSchemas、IndexSetting、および IndexSort パラメータも構成する必要があります。次の表にパラメータを示します。

パラメータ

説明

TableName

データテーブルの名前。

IndexName

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

FieldSchemas

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

  • FieldName: 必須。このパラメータは、検索インデックス内のフィールドの名前を指定します。この値は列名として使用されます。このパラメータの値は STRING 型です。

    検索インデックスの列は、データテーブルのプライマリキー列または属性列にすることができます。

  • FieldType: 必須。このパラメータは、フィールドの型を指定します。FieldType.XXX 形式で型を指定します。詳細については、データ型のマッピングを参照してください。

  • Array: オプション。このパラメータは、値が配列かどうかを指定します。このパラメータの値は BOOLEAN 型です。

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

    Nested 型のフィールドの値は配列です。FieldType パラメータを Nested に設定した場合、このパラメータは不要です。

  • Index: オプション。このパラメータは、列のインデックス作成を有効にするかどうかを指定します。このパラメータの値は BOOLEAN 型です。

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

  • Analyzer: オプション。このパラメータは、使用するアナライザの型を指定します。FieldType パラメータを Text に設定した場合、このパラメータを指定できます。このパラメータを指定しない場合は、デフォルトのアナライザ型である単一単語トークン化が使用されます。詳細については、トークン化を参照してください。

  • EnableSortAndAgg: オプション。このパラメータは、ソートと集計を有効にするかどうかを指定します。このパラメータの値は BOOLEAN 型です。

    ソートは、EnableSortAndAgg パラメータが true に設定されているフィールドに対してのみ有効にすることができます。詳細については、ソートとページングを参照してください。

    重要

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

  • Store: オプション。このパラメータは、フィールドの値を検索インデックスに格納するかどうかを指定します。このパラメータの値は BOOLEAN 型です。

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

  • IsVirtualField: オプション。このパラメータは、フィールドが仮想列かどうかを指定します。このパラメータの値は BOOLEAN 型です。デフォルト値: false。仮想列の場合は、このパラメータを true に設定する必要があります。仮想列の詳細については、仮想列を参照してください。

  • SourceFieldNames: オプション。このパラメータは、仮想列がデータテーブル内でマッピングされるソースフィールドの名前を指定します。このパラメータの値は STRING 型です。

    重要

    IsVirtualField パラメータを true に設定した場合、このパラメータは必須です。

  • DateFormats: オプション。日付の形式。このパラメータの値は STRING 型です。詳細については、日付データ型を参照してください。

    重要

    FieldType パラメータを DATE に設定した場合、このパラメータは必須です。

IndexSetting

RoutingFields を含む、検索インデックスの設定。

RoutingFields: オプション。カスタムルーティングフィールド。一部のプライマリキー列をルーティングフィールドとして指定できます。Tablestore は、指定されたルーティングフィールドに基づいて、検索インデックスに書き込まれたデータを異なるパーティションに分散します。ルーティングフィールドの値が同じデータレコードは、同じパーティションに分散されます。

IndexSort

Sorters を含む、検索インデックスの事前ソート設定。デフォルトでは、このパラメータを指定しない場合、フィールド値はプライマリキーに基づいてソートされます。

説明

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

オプション。検索インデックスの有効期限 (TTL)。デフォルト値: -1。検索インデックスの TTL は、検索インデックス内のデータの保持期間です。

データの保持期間が timeToLive パラメータの値を超えると、データは期限切れになります。Tablestore は期限切れのデータを自動的に削除します。

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

次のサンプルコードは、デフォルト設定を使用して検索インデックスを作成する方法を示しています。この例では、検索インデックスは、Keyword 型の Keyword_type_col 列、Long 型の Long_type_col 列、および Text 型の Text_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 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 パラメータを指定して検索インデックスを作成する

次のサンプルコードは、IndexSort パラメータを指定して検索インデックスを作成する方法を示しています。この例では、検索インデックスは、Keyword 型の Keyword_type_col 列、Long 型の Long_type_col 列、および Text 型の Text_type_col 列で構成されています。検索インデックスのデータは、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);
}

Date 型の列と仮想列を含む検索インデックスを作成する。

次のサンプルコードは、Date 型の列と仮想列を含む検索インデックスを作成する方法を示しています。この例では、検索インデックスは、Keyword 型の pk0 列、Long 型の pk1 列、Date 型の date_col 列、Geo-point 型の geo_col 列、および Text 型の col0_v1 列で構成されています。col0_v1 仮想列のソース列は col0 列です。返される結果は、pk1 列に基づいて昇順でソートされます。

/// <summary>
/// Date 型の列と仮想列を含む検索インデックスを作成します。
/// </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

関連情報

  • 検索インデックスを作成した後、検索インデックスで提供されるクエリメソッドを使用して、ビジネス要件に基づいて多次元からデータをクエリできます。次のクエリメソッドがサポートされています。タームクエリタームズクエリすべて一致クエリ一致クエリフレーズクエリプレフィックスクエリ範囲クエリワイルドカードクエリ地理クエリブールクエリネストされたクエリ、および 存在クエリ

    Search オペレーションを呼び出してデータをクエリする場合、ソートおよびページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページングを参照してください。

  • Search オペレーションを呼び出してデータをクエリする場合、折りたたみ (重複排除) 機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定された型のデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ (重複排除)を参照してください。

  • データテーブルのデータを分析する場合、Search オペレーションの集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、および行の総数を取得できます。詳細については、集計SQL クエリを参照してください。

  • 行をソートする必要なく、クエリ条件を満たすすべての行をすばやく取得する場合、ParallelScan および ComputeSplits オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンの実行を参照してください。

  • 検索インデックスのスキーマを動的に変更して、検索インデックスにインデックス列を追加、更新、または削除できます。詳細については、検索インデックスのスキーマを動的に変更するを参照してください。

  • ListSearchIndex オペレーションを呼び出して、データテーブルに作成されたすべての検索インデックスをクエリできます。詳細については、検索インデックスの一覧表示を参照してください。

  • DescribeSearchIndex オペレーションを呼び出して、検索インデックスの説明をクエリできます。たとえば、フィールド情報と検索インデックスの設定をクエリできます。詳細については、検索インデックスの説明のクエリを参照してください。

  • 不要になった検索インデックスを削除できます。詳細については、検索インデックスの削除を参照してください。