Le SDK Go V2 permet d'appeler l'opération QueryVectors pour effectuer une recherche par similarité dans un index vectoriel.
Autorisations
Par défaut, un compte Alibaba Cloud dispose de toutes les autorisations, tandis qu'un utilisateur RAM ou un rôle RAM n'en possède aucune. Le propriétaire du compte Alibaba Cloud ou un administrateur doit accorder les autorisations via une politique RAM ou une politique de bucket.
|
API |
Action |
Description |
|
QueryVectors |
|
Interroge les données vectorielles. |
Définition de la méthode
func (c *VectorsClient) QueryVectors(ctx context.Context, request *QueryVectorsRequest, optFns ...func(*oss.Options)) (*QueryVectorsResult, error)
Paramètres de requête
|
Paramètre |
Type |
Description |
|
ctx |
context.Context |
Contexte de la requête. |
|
request |
*QueryVectorsRequest |
Définit les paramètres de la requête, notamment le vecteur de requête, la condition de filtre et le nombre de résultats à renvoyer. Pour plus d'informations, consultez QueryVectorsRequest. |
|
optFns |
...func(*Options) |
(Facultatif) Paramètres de configuration au niveau de l'interface. Pour plus d'informations, consultez Options. |
Valeurs de retour
|
Paramètre |
Type |
Description |
|
result |
*QueryVectorsResult |
Valeur de retour. Ce paramètre est valide uniquement si err est nul. Pour plus d'informations, consultez QueryVectorsResult. |
|
err |
error |
Message d'erreur. Si l'opération réussit, ce paramètre est nul. |
Exemple de code
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/vectors"
)
var (
region string
bucketName string
accountId string
indexName string
)
func init() {
flag.StringVar(®ion, "region", "", "The region where the vector bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
flag.StringVar(&accountId, "account-id", "", "The ID of the Alibaba Cloud account.")
flag.StringVar(&indexName, "index", "", "The name of the vector index.")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, account-id required")
}
if len(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, index required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// To access over the public internet, set this to false or remove this line.
WithUseInternalEndpoint(true)
client := vectors.NewVectorsClient(cfg)
request := &vectors.QueryVectorsRequest{
Bucket: oss.Ptr(bucketName),
IndexName: oss.Ptr(indexName),
Filter: map[string]any{
"$and": []map[string]any{
{
"type": map[string]any{
"$in": []string{"comedy", "documentary"},
},
},
},
},
QueryVector: map[string]any{
"float32": []float32{float32(32)},
},
ReturnMetadata: oss.Ptr(true),
ReturnDistance: oss.Ptr(true),
TopK: oss.Ptr(10),
}
result, err := client.QueryVectors(context.TODO(), request)
if err != nil {
log.Fatalf("failed to query vectors %v", err)
}
log.Printf("query vectors result:%#v\n", result)
}
Références
Pour consulter l'exemple de code complet relatif à l'interrogation des vecteurs, voir query_vectors.go.