Tablestore SDK for Go を使用して、クエリベクトルに最も類似するベクトルを持つ TopK 行を検索します。
前提条件
開始する前に、次の準備を完了してください。
-
Tablestore Go SDK をインストールし、クライアントを初期化します。
-
ベクトルフィールドを含む検索インデックスを作成します。詳細については、「検索インデックスの作成」をご参照ください。
説明
ベクター検索では、KnnVectorQuery を使用してクエリベクトルとベクトルフィールド内のベクトルとの間の距離を計算し、最も類似した TopK 行を返します。Filter を使用して候補を制限し、MinScore を使用してスコアのしきい値を下回る行を除外できます。
ベクトルフィールドの数と次元、および TopK などのパラメーターには使用制限があります。詳細については、「検索インデックスの使用制限」をご参照ください。
検索インデックスには複数のサーバー側パーティションが含まれています。各パーティションは独自の TopK の最近傍行を返し、コーディネーターが結果をマージします。したがって、トークンベースのページネーションを使用する場合、取得可能な行の総数はインデックスパーティションの数に依存します。
func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)
query := &search.KnnVectorQuery{
FieldName: "embedding",
TopK: proto.Int32(10),
NumCandidates: proto.Int32(100),
Float32QueryVector: []float32{1, 0, 0, 0},
MinScore: proto.Float32(0.1),
Filter: &search.TermQuery{
FieldName: "category",
Term: "books",
},
}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetSort(&search.Sort{Sorters: []search.Sorter{search.NewScoreSort()}})
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_vector_index",
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.SearchHits)
パラメーター
クエリリクエスト
|
名前 |
型 |
説明 |
|
TableName (必須) |
string |
データテーブルの名前。 |
|
IndexName (必須) |
string |
検索インデックスの名前。 |
|
SearchQuery (必須) |
search.SearchQuery |
クエリ条件と共通のクエリ設定。 |
|
ColumnsToGet (オプション) |
tablestore.ColumnsToGet |
返される列の設定。このパラメーターを省略した場合、プライマリキー列のみが返されます。 |
|
RoutingValues (オプション) |
[]tablestore.PrimaryKey |
カスタムルーティングフィールドのプライマリキー値。カスタムルーティングが設定されていない場合は、このパラメーターを省略します。 |
|
TimeoutMs (オプション) |
int32 |
リクエストのタイムアウト期間 (ミリ秒単位)。 |
クエリ設定
|
名前 |
型 |
説明 |
|
SetQuery (必須) |
search.Query |
クエリ条件を指定します。 |
|
SetOffset (オプション) |
int32 |
開始位置を指定します。デフォルト値:0。オフセットベースのページネーションの場合、Offset + Limit は 100,000 を超えることはできません。 |
|
SetLimit (オプション) |
int32 |
返す行の最大数を指定します。デフォルト値:10。最大値:100。値が 0 の場合は行は返されません。 |
|
SetCollapse (オプション) |
search.Collapse |
クエリ結果を折りたたみます。詳細については、「クエリ結果の折りたたみ」をご参照ください。 |
|
SetSort (オプション) |
search.Sort |
結果のソート順を指定します。詳細については、「結果のソートとページネーション」をご参照ください。 |
|
SetGetTotalCount (オプション) |
bool |
一致したすべての行をカウントするかどうかを指定します。デフォルト値:false。 |
|
SetToken (オプション) |
[]byte |
前のレスポンスで返された NextToken 値を指定します。トークンには前のページのソート条件が含まれているため、このメソッドは Sort をクリアします。トークンベースのページネーションを使用する場合は、Offset を指定しないでください。 |
|
SetSearchFilter (オプション) |
search.SearchFilter |
クエリ後フィルターを適用します。詳細については、「クエリ後フィルターの使用」をご参照ください。 |
|
Aggregation (オプション) |
...search.Aggregation |
集計を設定します。詳細については、「集計」をご参照ください。 |
|
GroupBy (オプション) |
...search.GroupBy |
グループ化を設定します。詳細については、「集計」をご参照ください。 |
ベクトルクエリ条件
|
名前 |
型 |
説明 |
|
FieldName (必須) |
string |
ベクトルフィールドの名前。 |
|
TopK (必須) |
int32 |
返す最近傍行の数。値を大きくすると、一般的に再現率は向上しますが、レイテンシーとコストが増加します。 |
|
Float32QueryVector (必須) |
[]float32 |
クエリベクトル。次元は、インデックスフィールドの設定と一致する必要があります。 |
|
Filter (オプション) |
search.Query |
候補行のフィルター。ベクター検索を除くすべてのクエリタイプがサポートされています。 |
|
MinScore (オプション) |
float32 |
最小スコアのしきい値。値は 0 以上である必要があります。デフォルト値:0。スコアがこの値より大きい行のみが返されます。 |
|
NumCandidates (オプション) |
int32 |
再ランキングの候補ベクトルの数。値は TopK 以上である必要があります。値を大きくすると、一般的に再現率は向上しますが、レイテンシーは増加します。 |
|
Weight (オプション) |
float32 |
クエリ条件の関連性の重み。 |
返される列
|
名前 |
型 |
説明 |
|
Columns (オプション) |
[]string |
返す属性列。このパラメーターは、ReturnAll と ReturnAllFromIndex の両方が false の場合にのみ有効です。 |
|
ReturnAll (オプション) |
bool |
データテーブル内のすべての属性列を返すかどうかを指定します。デフォルト値:false。 |
|
ReturnAllFromIndex (オプション) |
bool |
インデックスに含まれるすべての属性列を返すかどうかを指定します。デフォルト値:false。このパラメーターと ReturnAll を同時に true に設定しないでください。 |
レスポンス
|
名前 |
型 |
説明 |
|
TotalCount |
int64 |
一致した行の総数。この値は SetGetTotalCount に依存します。 |
|
Rows |
[]*tablestore.Row |
現在のクエリで返された行。数は SetLimit で指定された値を超えません。 |
|
SearchHits |
[]*tablestore.SearchHit |
検索ヒット。ハイライト、ネストされた内部ヒット、または関連性スコアを使用する場合は、このフィールドを参照します。 |
|
NextToken |
[]byte |
次のページのトークン。値が空でない場合は、次のクエリに渡します。 |
|
IsAllSuccess |
bool |
すべてのインデックスパーティションがクエリされたかどうかを示します。値が false の場合、部分的な結果が返され、TotalCount が実際に一致した行数より少なくなることがあります。 |
|
AggregationResults |
search.AggregationResults |
集計結果。 |
|
GroupByResults |
search.GroupByResults |
グループ化の結果。 |