CreateSearchIndex メソッドを使用して、データテーブルに検索インデックスを作成します。 1 つのデータテーブルは複数の検索インデックスをサポートします。 検索インデックスを作成する際は、クエリ対象のフィールドを検索インデックスに追加する必要があります。 また、ルートキーや事前ソートなどの高度なオプションを検索インデックスに対して構成することもできます。
前提条件
クライアントが初期化されていること。 詳細については、「Tablestore クライアントを初期化する」をご参照ください。
以下の条件を満たすデータテーブルが作成されていること。 詳細については、「データテーブルを作成する」をご参照ください。
バージョンの最大数パラメータが 1 に設定されていること。
TTL(Time To Live)が -1 に設定されているか、データテーブルの更新が禁止されていること。
考慮事項
検索インデックスを作成する際は、検索インデックス内のフィールドの データ型 がデータテーブル内のフィールドのデータ型と一致している必要があります。
パラメータ
検索インデックスを作成する際は、テーブル名(TableName)、検索インデックス名(IndexName)、およびインデックス構造情報(IndexSchema)を指定する必要があります。 IndexSchema には、FieldSchemas(インデックス内のすべてのフィールドの設定)、IndexSetting(インデックス設定)、および IndexSort(インデックスの事前ソート設定)が含まれます。 次の表にパラメータを示します。
パラメータ | 説明 |
TableName | テーブルの名前。 |
IndexName | 検索インデックスの名前。 |
FieldSchemas | フィールドスキーマのリスト。 各フィールドスキーマでは、以下のパラメータを構成します。
|
IndexSetting | 検索インデックスの設定。RoutingFields パラメータの設定を含みます。 RoutingFields(オプション): カスタムルートフィールド。 一部のプライマリキー列をルートフィールドとして選択できます。 ほとんどの場合、指定する必要があるルートフィールドは 1 つだけです。 複数のルートフィールドを指定すると、システムはルートフィールドの値を 1 つの値に連結してルートキーとします。 Tablestore は、指定されたルートフィールドに基づいて、検索インデックスに書き込まれたデータを異なるパーティションに分散します。 同じルートフィールド値を持つデータは、同じパーティションに分散されます。 |
IndexSort | 検索インデックスの事前ソート設定。Sorters パラメータの設定を含みます。 IndexSort パラメータを空のままにすると、フィールド値はプライマリキーでソートされます。 説明 Nested 型のフィールドを含む検索インデックスの事前ソート設定はスキップできます。 Sorters(必須): 検索インデックスの事前ソート方法。 PrimaryKeySort と FieldSort がサポートされています。 ソートの詳細については、「ソートとページング」をご参照ください。
|
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
関連情報
検索インデックスを作成した後、検索インデックスが提供するクエリメソッドを使用して、ビジネス要件に基づいて多次元からデータをクエリできます。 クエリメソッドには、複数値完全一致検索、複数値完全一致検索、完全一致検索、一致検索、フレーズ一致検索、プレフィックス検索、範囲クエリ、ワイルドカード検索、ジオクエリ、ブール値クエリ、ネストされたクエリ、および exists クエリ があります。
データをクエリする際に、結果セットに対してソートとページングを実行したり、折りたたみ(重複排除)機能を使用して特定のフィールドに基づいて結果セットを折りたたむことができます。 詳細については、「ソートとページング」および「折りたたみ(重複排除)」をご参照ください。
検索インデックスを作成した後、ビジネス要件に基づいて検索インデックスを管理できます。 たとえば、検索インデックスのスキーマを動的に変更したり、インスタンス内の検索インデックスの名前をクエリしたり、検索インデックスの情報をクエリしたり、検索インデックスを削除したりできます。 詳細については、「検索インデックスのスキーマを動的に変更する」、「検索インデックスを一覧表示する」、「検索インデックスの説明をクエリする」、および「検索インデックスを削除する」をご参照ください。
集約機能または SQL クエリ機能を使用して、テーブル内のデータを分析できます。 たとえば、最大値と最小値、値の合計、行数をクエリできます。 詳細については、「集約」および「SQL クエリ」をご参照ください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合は、並列スキャン機能を使用できます。 詳細については、「並列スキャンを実行する」をご参照ください。