CreateSearchIndex メソッドを使用して、データテーブルに 1 つ以上の多次元インデックスを作成できます。インデックスを作成する際には、クエリ対象のフィールドを指定する必要があり、カスタムルーティングキーや事前ソートなどの高度なオプションも設定できます。
前提条件
Tablestore クライアントを初期化済みであること。詳細については、「Tablestore クライアントの初期化」をご参照ください。
次の条件を満たすデータテーブルを作成済みであること。詳細については、「データテーブルの作成」をご参照ください。
バージョンの最大数が 1 であること。
生存時間 (TTL) が -1 であるか、データテーブルの更新が禁止されていること。
注意事項
多次元インデックスを作成する際、フィールドのデータの型は、データテーブル内の対応するフィールドのデータの型と一致している必要があります。
パラメータ
多次元インデックスを作成するには、テーブル名 (TableName)、多次元インデックス名 (IndexName)、およびインデックススキーマ (IndexSchema) を指定する必要があります。IndexSchema には、FieldSchemas (フィールド設定)、IndexSetting (インデックス設定)、および IndexSort (事前ソート設定) が含まれます。次の表に、これらのパラメーターの詳細を示します。
パラメータ | 説明 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
FieldSchemas | FieldSchema オブジェクトのリスト。各 FieldSchema には、次のパラメーターが含まれます。
|
IndexSetting | インデックス設定。RoutingFields 設定が含まれます。 RoutingFields (任意):カスタムルートフィールド。一部のプライマリキー列をルートフィールドとして選択できます。ほとんどの場合、1 つだけ設定すれば十分です。複数のルーティングキーを設定した場合、システムはそれらの値を連結して 1 つの値にします。 |
IndexSort | インデックスの事前ソート設定。Sorters 設定が含まれます。このパラメーターを設定しない場合、データはデフォルトでプライマリキーによってソートされます。 説明 IndexSort は、Nested フィールドを含むインデックスではサポートされていません。これらのインデックスには事前ソートがありません。 Sorters (必須):インデックスの事前ソート方法。プライマリキーまたはフィールド値でソートできます。ソートの詳細については、「ソートとページネーション」をご参照ください。
|
TimeToLive |
例
デフォルト構成での多次元インデックスの作成
次の例では、多次元インデックスを作成する方法を示します。この多次元インデックスには、Keyword_type_col (Keyword)、Long_type_col (Long)、Text_type_col (Text) の 3 つのカラムが含まれています。ソートと集約が有効になっています。
/// <summary>
/// Keyword_type_col、Long_type_col、Text_type_col の 3 つの属性列を含む多次元インデックスを作成します。型はそれぞれ Keyword (非トークン化文字列)、Long (整数)、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("Searchindex is created: " + IndexName);
}IndexSort を指定した多次元インデックスの作成
次の例では、多次元インデックスを作成する方法を示します。この多次元インデックスには、Keyword_type_col (Keyword)、Long_type_col (Long)、Text_type_col (Text) の 3 つのカラムが含まれています。データは Long_type_col カラムで事前ソートされます。
/// <summary>
/// Keyword_type_col、Long_type_col、Text_type_col の 3 つの属性列を含む多次元インデックスを作成します。型はそれぞれ Keyword (非トークン化文字列)、Long (整数)、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 カラムはインデックスが作成され、EnableSortAndAgg が有効になっている必要があります。
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("Searchindex is created: " + 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
関連情報
多次元インデックスを作成した後、term クエリ、terms クエリ、match all クエリ、match クエリ、match phrase クエリ、prefix クエリ、range クエリ、wildcard クエリ、geo クエリ、Boolean クエリ、nested クエリ、exists クエリなど、さまざまなクエリタイプを使用して多次元データクエリを実行できます。
データをクエリする際、結果セットに対してソートとページネーションや折りたたみ (重複の削除) などの操作を実行できます。
検索インデックスを作成した後、スキーマを動的に変更する、検索インデックスを一覧表示する、検索インデックスの説明をクエリする、検索インデックスを削除するなどの操作を実行して管理できます。
最大値や最小値の検索、合計の計算、行数のカウントなどのデータ分析には、統計的集約機能またはSQL クエリ機能を使用できます。
結果セットの順序が重要でない場合にデータを迅速にエクスポートするには、並列スキャン機能を使用できます。