k 近傍(KNN)ベクトルクエリ機能を使用して、ベクトルに基づいて近似最近傍探索を実行できます。これにより、大規模なデータセット内で、クエリ対象のベクトルと最も類似性の高いデータ項目を見つけることができます。
KNN ベクトルクエリ機能は招待プレビュー中で、デフォルトでは無効になっています。KNN ベクトルクエリ機能を使用するには、チケットを送信してください。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
検索インデックスが作成され、ベクトルフィールドがデータテーブルで構成されていること。詳細については、検索インデックスの作成を参照してください。
使用上の注意
KNN ベクトルクエリ機能は、バージョン 5.5.0 以降の Tablestore SDK for Node.js でサポートされています。サポートされているバージョンの Tablestore SDK for Node.js がインストールされていることを確認してください。
説明Tablestore SDK for Node.js のバージョン履歴については、Tablestore SDK for Java のバージョン履歴を参照してください。
ベクトルフィールドの数とベクトルフィールドの次元数には制限があります。詳細については、検索インデックスの制限を参照してください。
検索インデックスサーバーには複数のパーティションがあります。検索インデックスサーバーの各パーティションは、クエリ対象のベクトルに最も近い上位 K 個の近傍を返します。パーティションによって返された上位 K 個の最近傍は、クライアントノードで集計されます。トークンを使用してすべてのデータをページごとにクエリする場合、レスポンスの行の総数は、検索インデックスサーバーのパーティションの数に関連しています。
パラメーター
パラメーター | 必須 | 説明 |
fieldName | はい | ベクトルフィールドの名前。 |
topK | はい | クエリ対象のベクトルと最も類似性の高い上位 K 個のクエリ結果。topK パラメーターの最大値については、検索インデックスの制限を参照してください。 重要
|
float32QueryVector | はい | 類似性をクエリするベクトル。 |
filter | いいえ | フィルター。KNN ベクトルクエリ条件ではないクエリ条件の組み合わせを使用できます。 |
例
次のサンプルコードは、データテーブル内の特定のベクトルの 10 個の最近傍をクエリする方法の例を示しています。この例では、最近傍ベクトルの col_keyword 列の値は "0" に等しく、最近傍ベクトルの col_long 列の値は 0 から 50 の間でなければなりません。
const tableName = "<TABLE_ANME>"
const indexName = "<SEARCH_INDEX_NAME>"
async function knnVectorQuery() {
return new Promise(function (resolve, reject) {
let params = {
tableName: tableName,
indexName: indexName,
searchQuery: {
offset: 0,
limit: 10,
query: {
queryType: TableStore.QueryType.KNN_VECTOR_QUERY,
query: {
fieldName: "col_vector",
topK: TableStore.Long.fromNumber(10),
float32QueryVector: [1.0, 1.1, 1.2, -1.3],
filter: {
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
mustQueries: [
{
queryType: TableStore.QueryType.RANGE_QUERY,
query: {
fieldName: "col_long",
rangeFrom: TableStore.Long.fromNumber(0),
includeLower: true,
rangeTo: TableStore.Long.fromNumber(50),
includeUpper: true,
}
},
{
queryType: TableStore.QueryType.TERM_QUERY,
query: {
fieldName: "col_keyword",
term: "0",
}
},
],
}
},
},
},
sort: {
sorters: [
{
scoreSort: {
order: TableStore.SortOrder.SORT_ORDER_DESC // クエリ結果をスコアに基づいて降順にソートします。
}
}
],
},
getTotalCount: false,
},
columnToGet: {
returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
returnNames: ["col_long", "col_keyword"]
},
timeoutMs: 10000,
}
client.search(params, function (err, data) {
if (err) {
console.log('search error:', err.toString());
reject(err);
} else {
console.log('RequestId:', data.RequestId);
for (let i = 0; i < data.searchHits.length; i++) {
let hit = data.searchHits[i]
console.log('Score:', hit.score, 'Row:', hit.row);
}
resolve(data)
}
});
})
}
knnVectorQuery();
関連情報
検索インデックスでサポートされているクエリタイプは次のとおりです。用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、地理クエリ、ネストされたクエリ、ベクトルクエリ、存在クエリ。ビジネス要件に基づいてクエリタイプを選択できます。
クエリ条件を満たす行をソートまたはページングする場合は、ソートおよびページング機能を使用できます。詳細については、ソートとページングを参照してください。
特定の列に基づいて結果セットを折りたたむ場合は、折りたたみ(重複排除)機能を使用できます。これにより、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブル内のデータ(極値、合計、行の総数など)を分析する場合は、集計操作を実行するか、SQL ステートメントを実行できます。詳細については、集計およびSQL クエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行をすばやく取得する場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。