k 近傍 (KNN) ベクトルクエリ機能を使用して、ベクトルに基づいて近似最近傍探索を実行できます。これにより、大規模なデータセット内で、クエリ対象のベクトルと最も類似性の高いデータ項目を見つけることができます。
KNN ベクトルクエリ機能は招待プレビュー段階にあり、デフォルトでは無効になっています。KNN ベクトルクエリ機能を使用するには、チケットを送信 してください。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
データテーブルの検索インデックスが作成され、ベクトルフィールドが指定されていること。詳細については、検索インデックスの作成を参照してください。
使用上の注意
最新バージョンの Tablestore SDK for Go がインストールされていることを確認してください。詳細については、Tablestore SDK for Go のインストールを参照してください。
ベクトルフィールドの数とベクトルフィールドの次元数には制限があります。詳細については、検索インデックスの制限を参照してください。
検索インデックスサーバーには複数のパーティションがあります。検索インデックスサーバーの各パーティションは、クエリ対象のベクトルに最も近い上位 K 個の近傍を返します。パーティションによって返された上位 K 個の近傍は、クライアントノードで集計されます。トークンを使用してすべてのデータをページごとにクエリする場合、レスポンス内の行の総数は、検索インデックスサーバーのパーティションの数に関連しています。
パラメーター
パラメーター | 必須 | 説明 |
FieldName | はい | ベクトルフィールドの名前。 |
TopK | はい | クエリ対象のベクトルと最も類似性の高い上位 K 個のクエリ結果。TopK パラメーターの最大値については、検索インデックスの制限を参照してください。 重要
|
Float32QueryVector | はい | 類似性をクエリするベクトル。 |
Filter | いいえ | フィルター。KNN ベクトルクエリ条件ではないクエリ条件の組み合わせを使用できます。 |
例
次のサンプルコードは、指定されたベクトルと最も類似性の高い上位 10 個のベクトルをテーブル内でクエリする方法の例を示しています。この例では、上位 10 個のベクトルは、col_keyword 列の値が hangzhou であるというクエリ条件を満たす必要があります。
func query(client *tablestore.TableStoreClient) {
searchQuery := search.NewSearchQuery()
searchQuery.Query = &search.KnnVectorQuery{
FieldName: "col_vector",
TopK: proto.Int32(10),
Float32QueryVector: []float32{-1.4, 1, 1, 1.2},
Filter: &search.BoolQuery{
ShouldQueries: []search.Query{
&search.TermQuery{
FieldName: "col_keyword",
Term: "hangzhou",
},
},
},
}
searchQuery.Sort = &search.Sort{
Sorters: []search.Sorter{
search.NewScoreSort(), // クエリ結果をスコアに基づいてソートします。
},
}
searchRequest := &tablestore.SearchRequest{
SearchQuery: searchQuery,
TableName: "<TABLE_NAME>",
IndexName: "<SEARCH_INDEX_NAME>",
ColumnsToGet: &tablestore.ColumnsToGet{Columns: []string{
"col_keyword",
"col_long",
}},
}
if resp, err := client.Search(searchRequest); err != nil {
fmt.Println("float32 vector query failed: ", err)
} else {
for _, hit := range resp.SearchHits {
fmt.Println("score:", *hit.Score)
jsonBody, err := json.Marshal(hit.Row)
if err != nil {
panic(err)
}
fmt.Println("row: ", string(jsonBody))
}
}
}
関連情報
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理クエリ、ブールクエリ、KNN ベクトルクエリ、ネストされたクエリ、存在クエリ。検索インデックスによって提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数の次元からデータをクエリできます。
ソート機能とページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページングを参照してください。
折りたたみ (個別) 機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に 1 回だけ表示されます。詳細については、折りたたみ (個別)を参照してください。
データテーブル内のデータを分析する場合、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、および行の総数を取得できます。詳細については、集計およびSQL クエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合、ParallelScan 操作と ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンの実行を参照してください。