CreateSearchIndex オペレーションを呼び出して、データテーブルに 1 つ以上の検索インデックスを作成できます。検索インデックスを作成する際に、クエリ対象のフィールドを検索インデックスに追加し、検索インデックスの詳細設定を構成できます。たとえば、ルーティングキーと事前ソート設定を構成できます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成されていること。データテーブルの TimeToLive パラメータは -1 に設定され、MaxVersions パラメータは 1 に設定されています。
使用方法
検索インデックス内のフィールドのデータ型は、検索インデックスが作成されるデータテーブル内のフィールドのデータ型と一致している必要があります。詳細については、データ型のマッピングを参照してください。
パラメータ
検索インデックスを作成する際は、TableName、IndexName、および IndexSchema パラメータを構成する必要があります。また、IndexSchema パラメータ内で FieldSchemas、IndexSetting、および IndexSort パラメータも構成する必要があります。次の表にパラメータを示します。
パラメータ | 説明 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
FieldSchemas | フィールドスキーマのリスト。各フィールドスキーマには、次のパラメータが含まれます。
|
IndexSetting | RoutingFields を含む、検索インデックスの設定。 RoutingFields: オプション。カスタムルーティングフィールド。一部のプライマリキー列をルーティングフィールドとして指定できます。Tablestore は、指定されたルーティングフィールドに基づいて、検索インデックスに書き込まれたデータを異なるパーティションに分散します。ルーティングフィールドの値が同じデータレコードは、同じパーティションに分散されます。 |
IndexSort | Sorters を含む、検索インデックスの事前ソート設定。デフォルトでは、このパラメータを指定しない場合、フィールド値はプライマリキーに基づいてソートされます。 説明 Nested 型のフィールドを含む検索インデックスの事前ソート設定はスキップできます。 Sorters: 必須。検索インデックスの事前ソート方法。PrimaryKeySort と FieldSort がサポートされています。詳細については、ソートとページングを参照してください。
|
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 オペレーションを呼び出して、検索インデックスの説明をクエリできます。たとえば、フィールド情報と検索インデックスの設定をクエリできます。詳細については、検索インデックスの説明のクエリを参照してください。
不要になった検索インデックスを削除できます。詳細については、検索インデックスの削除を参照してください。