CreateSearchIndex メソッドを使用して、データテーブルに 1 つ以上の多次元インデックスを作成できます。多次元インデックスを作成するときは、クエリするフィールドをインデックスに追加する必要があります。ルートフィールドや事前ソートなどの高度なオプションを設定することもできます。
前提条件
Tablestore クライアントを初期化します。詳細については、「Tablestore クライアントの初期化」をご参照ください。
次の条件を満たすデータテーブルを作成します。詳細については、「データテーブルの作成」をご参照ください。
バージョンの最大数は 1 である必要があります。
生存時間 (TTL) は -1 であるか、データテーブルの更新が無効になっている必要があります。
注意事項
パラメーター
多次元インデックスを作成するときは、テーブル名 (tableName)、インデックス名 (indexName)、およびインデックススキーマ (schema) を指定する必要があります。スキーマには、フィールドスキーマ (fieldSchemas)、インデックス設定 (indexSetting)、およびインデックス事前ソート設定 (indexSort) が含まれます。次の表に、これらのパラメーターを説明します。
パラメーター | 説明 |
tableName | データテーブルの名前。 |
indexName | 検索インデックスの名前。 |
fieldSchemas | フィールドスキーマのリスト。各フィールドスキーマには、次のパラメーターが含まれます:
|
indexSetting | インデックス設定。routingFields 設定が含まれます。 routingFields (オプション):カスタムルートフィールド。一部のプライマリキー列をルートフィールドとして選択できます。ほとんどの場合、1 つだけ設定すれば十分です。複数のルーティングキーを設定した場合、システムはルーティングキーの値を連結して単一の値を形成します。 |
indexSort | インデックス事前ソート設定。sorters 設定が含まれます。このパラメーターを設定しない場合、データはデフォルトでプライマリキーによってソートされます。 説明 indexSort は、Nested フィールドを含むインデックスではサポートされていません。事前ソートは実行されません。 sorters (必須):インデックスの事前ソートメソッド。プライマリキーまたはフィールド値でソートできます。ソートの詳細については、「ソートとページング」をご参照ください。
|
timeToLive |
例
多次元インデックスの作成とトークナイザの設定
次の例では、多次元インデックスを作成する方法を示します。このインデックスには、pic_id (Keyword)、count (Long)、time_stamp (Long)、pic_description (Text)、col_vector (Vector)、pos (Geo-point)、pic_tag (Nested)、date (Date)、analyzer_single_word (Text)、analyzer_split (Text)、analyzer_fuzzy (Text) の各カラムが含まれます。pic_tag カラムには、sub_tag_name (Keyword) と tag_name (Keyword) の 2 つのサブフィールドが含まれます。analyzer_single_word カラムは文字トークン化を使用します。analyzer_split カラムはデリミタトークン化を使用します。analyzer_fuzzy カラムはあいまいトークン化を使用します。
client.createSearchIndex({
tableName: "<TABLE_NAME>", // テーブル名を設定します。
indexName: "<INDEX_NAME>", // 多次元インデックス名を設定します。
schema: {
fieldSchemas: [
{
fieldName: "pic_id",
fieldType: TableStore.FieldType.KEYWORD, // フィールド名とフィールドタイプを設定します。
index: true, // インデックス作成を有効にします。
enableSortAndAgg: true, // ソートと集約を有効にします。
isAnArray: false
},
{
fieldName: "count",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
isAnArray: false
},
{
fieldName: "time_stamp",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: false,
isAnArray: false,
},
{
fieldName: "pic_description",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
isAnArray: false,
},
{
fieldName: "col_vector",
fieldType: TableStore.FieldType.VECTOR,
index: true,
isAnArray: false,
vectorOptions: {
dataType: TableStore.VectorDataType.VD_FLOAT_32,
dimension: 4,
metricType: TableStore.VectorMetricType.VM_COSINE,
}
},
{
fieldName: "pos",
fieldType: TableStore.FieldType.GEO_POINT,
index: true,
enableSortAndAgg: true,
isAnArray: false,
},
{
fieldName: "pic_tag",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
fieldSchemas: [
{
fieldName: "sub_tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
}
]
},
{
fieldName: "date",
fieldType: TableStore.FieldType.DATE,
index: true,
enableSortAndAgg: true,
isAnArray: false,
dateFormats: ["yyyy-MM-dd'T'HH:mm:ss.SSSSSS"],
},
{
fieldName: "analyzer_single_word",
fieldType: TableStore.FieldType.TEXT,
analyzer: "single_word",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
caseSensitive: true,
delimitWord: false,
}
},
{
fieldName: "analyzer_split",
fieldType: TableStore.FieldType.TEXT,
analyzer: "split",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
delimiter: ",",
}
},
{
fieldName: "analyzer_fuzzy",
fieldType: TableStore.FieldType.TEXT,
analyzer: "fuzzy",
index: true,
enableSortAndAgg: false,
isAnArray: false,
analyzerParameter: {
minChars: 1,
maxChars: 5,
}
},
],
indexSetting: { // インデックスの設定オプション。
"routingFields": ["count", "pic_id"], // プライマリキー列のみをルートフィールドとして設定できます。
"routingPartitionSize": null
},
//indexSort: {// indexSort は、Nested フィールドを含むインデックスではサポートされていません。事前ソートは実行されません。
//sorters: [
// { // indexSort を設定しない場合、データはデフォルトでプライマリキーの昇順でソートされます。
// primaryKeySort: {
// order: TableStore.SortOrder.SORT_ORDER_ASC
// }
// },
//{
// fieldSort: {
// fieldName: "Col_Keyword",
// order: TableStore.SortOrder.SORT_ORDER_DESC // indexSort のソート順を設定します。
// }
//}
//]
//},
timeToLive: 1000000, // 単位:秒。
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});多次元インデックスの作成とハイライトの有効化
次の例では、多次元インデックスを作成する際にハイライトを有効にする方法を示します。このインデックスには、k (Keyword)、t (Text)、n (Nested) の 3 つのフィールドが含まれます。n フィールドには、nk (Keyword)、nl (Long)、nt (Text) の 3 つのサブフィールドが含まれます。ハイライト機能は、t フィールドと nt サブフィールドで有効になっています。
client.createSearchIndex({
tableName: "<TABLE_NAME>", // テーブル名を設定します。
indexName: "<SEARCH_INDEX_NAME>", // 多次元インデックス名を設定します。
schema: {
fieldSchemas: [
{
fieldName: "k",
fieldType: TableStore.FieldType.KEYWORD, // フィールド名とフィールドタイプを設定します。
index: true, // インデックス作成を有効にします。
enableSortAndAgg: true, // ソートと集約を有効にします。
isAnArray: false
},
{
fieldName: "t",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // フィールドのハイライトを有効にします。
isAnArray: false,
},
{
fieldName: "n",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
fieldSchemas: [
{
fieldName: "nk",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "nl",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
},
{
fieldName: "nt",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // フィールドのハイライトを有効にします。
},
]
},
],
indexSetting: { // インデックスの設定オプション。
"routingFields": ["id"], // プライマリキー列のみをルートフィールドとして設定できます。
"routingPartitionSize": null
},
//indexSort: {// indexSort は、Nested フィールドを含むインデックスではサポートされていません。事前ソートは実行されません。
//sorters: [
// { // indexSort を設定しない場合、データはデフォルトでプライマリキーの昇順でソートされます。
// primaryKeySort: {
// order: TableStore.SortOrder.SORT_ORDER_ASC
// }
// },
//{
// fieldSort: {
// fieldName: "Col_Keyword",
// order: TableStore.SortOrder.SORT_ORDER_DESC // indexSort のソート順を設定します。
// }
//}
//]
//},
timeToLive: 1000000, // 単位:秒。
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});よくある質問
関連ドキュメント
多次元インデックスを作成した後、クエリタイプを選択して多次元データクエリを実行できます。多次元インデックスのクエリタイプには、term クエリ、terms クエリ、match all クエリ、match クエリ、match phrase クエリ、prefix クエリ、range クエリ、wildcard クエリ、geo クエリ、Boolean クエリ、ベクトル検索、nested クエリ、exists クエリなどがあります。
データをクエリする際、結果セットに対してソートとページング、ハイライト、または折りたたみ (重複排除) 操作を実行できます。
多次元インデックスを作成した後、必要に応じて管理できます。操作には、スキーマの動的変更、多次元インデックス設定の更新、多次元インデックスのリスト表示、多次元インデックスの説明のクエリ、多次元インデックスの削除などがあります。
最大値や最小値の検索、合計の計算、行数のカウントなどのデータ分析を実行するには、統計的集約機能またはSQL クエリ機能を使用できます。
結果セット全体の順序に関係なくデータを迅速にエクスポートするには、並列スキャン機能を使用できます。