CreateSearchIndex メソッドを使用して、データテーブルの検索インデックスを 1 つ以上作成します。検索インデックスを作成する際は、クエリ対象フィールドを指定し、オプションでカスタムルーティングキーおよび事前ソートなどの高度なオプションを設定できます。
前提条件
作業を開始する前に、以下の条件を満たしていることを確認してください。
Tablestore クライアントが初期化されています。詳細については、「Tablestore クライアントの初期化」をご参照ください。
-
データテーブルが作成されており、以下の条件を満たしています。詳細については、「データテーブルの作成」をご参照ください。
バージョンの最大数が 1 に設定されています。
生存時間 (TTL) が -1 に設定されているか、データテーブルの更新が無効になっています。
フィールドタイプの互換性
多次元インデックス内の各フィールドのデータの型は、データテーブル内の対応するフィールドのデータの型と一致している必要があります。
パラメーター
検索インデックスを作成するには、テーブル名(TableName)、検索インデックス名(IndexName)、およびインデックススキーマ(IndexSchema)を指定します。IndexSchema には、FieldSchemas(フィールド設定)、IndexSetting(インデックス設定)、および IndexSort(事前ソート設定)が含まれます。
|
パラメーター |
説明 |
|
TableName |
データテーブルの名前です。 |
|
IndexName |
検索インデックスの名前。 |
|
FieldSchemas |
FieldSchema オブジェクトのリストです。各 FieldSchema オブジェクトには、以下のパラメーターが含まれます。
|
|
IndexSetting |
インデックス設定です。以下のパラメーターが含まれます。 RoutingFields (オプション):カスタムルートフィールドです。1 つ以上のプライマリキー列をルートフィールドとして選択します。ほとんどのケースではルートフィールドを 1 つ指定すれば十分です。複数のルートキーを設定した場合、システムはそれらの値を連結して単一の値として扱います。同じルートフィールド値を持つレコードは、同じデータパーティションにインデックスされます。 |
|
IndexSort |
インデックスの事前ソート設定です。指定しない場合、データはデフォルトでプライマリキーによってソートされます。Nested フィールドを含むインデックスは IndexSort をサポートしません。 Sorters (必須):事前ソート方法です。プライマリキーまたはフィールド値によるソートをサポートします。詳細については、「ソートとページネーション」をご参照ください。
|
|
TimeToLive |
オプション。多次元インデックス内のデータの生存時間 (TTL) を秒単位で指定します。デフォルト:-1 (データは期限切れになりません)。最小値:86400 秒 (1 日)。保持期間が設定された TTL を超えると、期限切れのデータは自動的にクリーンアップされます。 |
例
デフォルト設定で検索インデックスを作成する
Keyword_type_col (Keyword)、Long_type_col (Long)、Text_type_col (Text) の 3 つのフィールドを持つ多次元インデックスを作成し、Keyword フィールドおよび Long フィールドでソートおよび集約を有効にします。
/// <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 (トークン化文字列)。
/// Long_type_col の値で結果を昇順に事前ソートします。
/// </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 で事前ソート (昇順)。フィールドの 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) の 5 つのフィールドを持つ多次元インデックスを作成します。仮想カラム col0_v1 は、ソースカラム col0 にマッピングされます。結果は pk1 の値で昇順に事前ソートされます。
/// <summary>
/// 日付フィールドおよび仮想カラムを含む多次元インデックスを作成します。
/// 仮想カラム col0_v1 は、データテーブル内のソースカラム col0 にマッピングされます。
/// </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" } // ソースカラム 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);
}
よくある質問
次のステップ
多様なクエリタイプを使用して多次元インデックスをクエリし、多次元データ分析を実行します。サポートされるクエリタイプには、完全一致検索、複数値完全一致検索、完全一致検索、一致検索、フレーズ一致検索、プレフィックス検索、範囲クエリ、ワイルドカード検索、ジオクエリ、ブール値クエリ、ネストされたクエリ、および存在チェッククエリがあります。
クエリ結果にソートとページネーションまたは折りたたみ (重複排除)を適用します。
検索インデックスを管理するには、スキーマを動的に変更、検索インデックスのリスト表示、検索インデックスの説明の照会、および検索インデックスの削除を行います。
特定の結果順序を必要とせずにデータを迅速にエクスポートするには、並列スキャン機能を使用します。