CreateSearchIndex オペレーションを呼び出して、データテーブルに1つ以上の検索インデックスを作成できます。検索インデックスを作成するときに、クエリを実行するフィールドを検索インデックスに追加し、検索インデックスの詳細設定を構成できます。たとえば、ルーティングキーと事前ソート設定を構成できます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するを参照してください。
maxVersions パラメータが 1 に設定されたデータテーブルが作成されていること。さらに、データテーブルの timeToLive パラメータは、次のいずれかの条件を満たしている必要があります。詳細については、データテーブルを作成するを参照してください。
データテーブルの timeToLive パラメータが -1 に設定されていること。これは、データテーブル内のデータが期限切れにならないことを指定します。
データテーブルの timeToLive パラメータが -1 以外の値に設定されており、データテーブルの更新操作が禁止されていること。
使用上の注意
検索インデックス内のフィールドのデータ型は、検索インデックスが作成されたデータテーブル内のフィールドのデータ型と一致している必要があります。詳細については、基本データ型のマッピングを参照してください。
検索インデックスの timeToLive パラメータを -1 以外の値に設定するには、検索インデックスが作成されたデータテーブルで UpdateRow 操作が禁止されていることを確認してください。検索インデックスの timeToLive パラメータの値は、データテーブルの timeToLive パラメータの値以下である必要があります。詳細については、検索インデックスのTTLを指定するを参照してください。
パラメータ
検索インデックスを作成するときは、tableName、indexName、および schema パラメータを構成する必要があります。また、schema パラメータで fieldSchemas、indexSetting、および indexSort パラメータを構成する必要があります。次の表に、上記のパラメータについて説明します。
パラメータ | 説明 |
tableName | データテーブルの名前。 |
indexName | 検索インデックスの名前。 |
fieldSchemas | フィールドスキーマのリスト。各フィールドスキーマで、次のパラメータを構成します。
|
indexSetting | routingFields パラメータの設定を含む、検索インデックスの設定。 routingFields (オプション): カスタムルーティングフィールド。特定のプライマリキー列をルーティングフィールドとして指定できます。Tablestore は、指定されたルーティングフィールドに基づいて、検索インデックスに書き込まれたデータを異なるパーティションに分散します。同じルーティングフィールド値を持つデータは、同じパーティションに分散されます。 |
indexSort | sorters パラメータの設定を含む、検索インデックスの事前ソート設定。indexSort パラメータを構成しない場合、フィールド値はプライマリキーでソートされます。 説明 fieldType パラメータを Nested に設定した場合、indexSort パラメータを構成することはできません。 sorters: このパラメータは必須で、検索インデックスの事前ソート方法を指定します。有効な値: PrimaryKeySort および FieldSort。詳細については、ソートとページングを参照してください。
|
timeToLive | (オプション) 検索インデックス内のデータの保持期間。デフォルト値: -1。 データの保持期間が timeToLive パラメータの値を超えると、データは期限切れになります。Tablestore は、期限切れのデータを自動的に削除します。 このパラメータの値は 86400 以上である必要があります。値 86400 は 1 日を指定します。このパラメータを -1 に設定することもできます。これは、データが期限切れにならないことを指定します。 |
例
アナライザータイプを指定して検索インデックスを作成する
次のサンプルコードは、アナライザータイプを指定して検索インデックスを作成する方法の例を示しています。この例では、検索インデックスは次のフィールドで構成されています。Keyword タイプの pic_id フィールド、Long タイプの count フィールド、Long タイプの time_stamp フィールド、Text タイプの pic_description フィールド、Vector タイプの col_vector フィールド、Geo-point タイプの pos フィールド、Nested タイプの pic_tag フィールド、Date タイプの date フィールド、Text タイプの analyzer_single_word フィールド、Text タイプの analyzer_split フィールド、および Text タイプの analyzer_fuzzy フィールド。pic_tag フィールドは、Keyword タイプの sub_tag_name サブフィールドと Keyword タイプの tag_name サブフィールドで構成されています。アナライザータイプは、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, // フィールドのソートと集計を有効にします。
store: false,
isAnArray: false
},
{
fieldName: "count",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
store: true,
isAnArray: false
},
{
fieldName: "time_stamp",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: false,
store: true,
isAnArray: false,
},
{
fieldName: "pic_description",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
store: true,
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,
store: true,
isAnArray: false,
},
{
fieldName: "pic_tag",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
store: false,
fieldSchemas: [
{
fieldName: "sub_tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
store: false,
},
{
fieldName: "tag_name",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
store: false,
}
]
},
{
fieldName: "date",
fieldType: TableStore.FieldType.DATE,
index: true,
enableSortAndAgg: true,
store: 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,
store: true,
isAnArray: false,
analyzerParameter: {
caseSensitive: true,
delimitWord: false,
}
},
{
fieldName: "analyzer_split",
fieldType: TableStore.FieldType.TEXT,
analyzer: "split",
index: true,
enableSortAndAgg: false,
store: true,
isAnArray: false,
analyzerParameter: {
delimiter: ",",
}
},
{
fieldName: "analyzer_fuzzy",
fieldType: TableStore.FieldType.TEXT,
analyzer: "fuzzy",
index: true,
enableSortAndAgg: false,
store: true,
isAnArray: false,
analyzerParameter: {
minChars: 1,
maxChars: 5,
}
},
],
indexSetting: { // 検索インデックスの設定を構成します。
"routingFields": ["count", "pic_id"], // データテーブルのプライマリキー列のみを検索インデックスのルーティングフィールドとして指定できます。
"routingPartitionSize": null
},
//indexSort: {// ネストされたフィールドを含む検索インデックスの事前ソート設定は省略できます。
//sorters: [
// { // indexSort パラメータを構成しない場合、データはプライマリキーの昇順でソートされます。
// primaryKeySort: {
// order: TableStore.SortOrder.SORT_ORDER_ASC
// }
// },
//{
// fieldSort: {
// fieldName: "Col_Keyword",
// order: TableStore.SortOrder.SORT_ORDER_DESC // インデックスのソート順を指定します。
// }
//}
//]
//},
timeToLive: 1000000, // データ保持期間を指定します。単位: 秒。
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});
ハイライト機能を有効にして検索インデックスを作成する
次のサンプルコードは、ハイライト機能を有効にして検索インデックスを作成する方法の例を示しています。この例では、検索インデックスは、Keyword タイプの k フィールド、Text タイプの t フィールド、および Nested タイプの n フィールドで構成されています。n フィールドは、Keyword タイプの nk サブフィールド、Long タイプの nk サブフィールド、および Text タイプの nt サブフィールドで構成されています。さらに、Text タイプの t フィールドと Text タイプの nt サブフィールドでハイライト機能が有効になっています。
client.createSearchIndex({
tableName: "<TABLE_NAME>", // データテーブルの名前を指定します。
indexName: "<SEARCH_INDEX_NAME>", // 検索インデックスの名前を指定します。
schema: {
fieldSchemas: [
{
fieldName: "k",
fieldType: TableStore.FieldType.KEYWORD, // フィールドの名前とタイプを指定します。
index: true, // フィールドのインデックス作成を有効にします。
enableSortAndAgg: true, // フィールドのソートと集計を有効にします。
store: false,
isAnArray: false
},
{
fieldName: "t",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // フィールドのハイライトを有効にします。
store: true,
isAnArray: false,
},
{
fieldName: "n",
fieldType: TableStore.FieldType.NESTED,
index: false,
enableSortAndAgg: false,
store: false,
fieldSchemas: [
{
fieldName: "nk",
fieldType: TableStore.FieldType.KEYWORD,
index: true,
enableSortAndAgg: true,
store: false,
},
{
fieldName: "nl",
fieldType: TableStore.FieldType.LONG,
index: true,
enableSortAndAgg: true,
store: false,
},
{
fieldName: "nt",
fieldType: TableStore.FieldType.TEXT,
index: true,
enableSortAndAgg: false,
enableHighlighting: true, // フィールドのハイライトを有効にします。
store: false,
},
]
},
],
indexSetting: { // 検索インデックスの設定を構成します。
"routingFields": ["id"], // データテーブルのプライマリキー列のみを検索インデックスのルーティングフィールドとして指定できます。
"routingPartitionSize": null
},
//indexSort: {// ネストされたフィールドを含む検索インデックスの事前ソート設定は省略できます。
//sorters: [
// { // indexSort パラメータを構成しない場合、データはプライマリキーの昇順でソートされます。
// primaryKeySort: {
// order: TableStore.SortOrder.SORT_ORDER_ASC
// }
// },
//{
// fieldSort: {
// fieldName: "Col_Keyword",
// order: TableStore.SortOrder.SORT_ORDER_DESC // インデックスのソート順を指定します。
// }
//}
//]
//},
timeToLive: 1000000, // データ保持期間を指定します。単位: 秒。
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:',data);
});
FAQ
参考文献
検索インデックスを作成した後、検索インデックスで提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数の次元からデータをクエリできます。検索インデックスは通常、次のクエリメソッドを提供します。用語クエリ、用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理クエリ、ブールクエリ、KNNベクトル検索クエリ、ネストされたクエリ、および存在クエリ。
Search 操作を呼び出してデータをクエリする場合、ソートおよびページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページングを参照してください。
Search 操作を呼び出してデータをクエリする場合、折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
検索インデックスの Time to Live(TTL)を指定して、検索インデックスの履歴データを削除したり、検索インデックスのデータの保持期間を延長したりできます。詳細については、検索インデックスの構成を更新するを参照してください。
テーブル内のデータを分析する場合、Search 操作を呼び出して集計機能または SQL クエリ機能を使用できます。たとえば、最大値と最小値、値の合計、行数をクエリできます。詳細については、集計とSQL クエリを参照してください。
行をソートすることなく、クエリ条件を満たすすべての行を取得する場合、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。
検索インデックスのスキーマを動的に変更して、検索インデックスにインデックス列を追加、更新、または削除できます。詳細については、検索インデックスのスキーマを動的に変更するを参照してください。
ListSearchIndex 操作を呼び出して、データテーブルに作成されたすべての検索インデックスをクエリできます。詳細については、検索インデックスを一覧表示するを参照してください。
DescribeSearchIndex 操作を呼び出して、フィールド情報や検索インデックスの構成など、検索インデックスの説明をクエリできます。詳細については、検索インデックスの説明をクエリするを参照してください。
不要になった検索インデックスを削除できます。詳細については、検索インデックスを削除するを参照してください。