Indeks vektor menyimpan dan mengelola data vektor dalam bucket vektor. Setiap indeks menentukan dimensi, metrik jarak, dan struktur metadata yang menjadi dasar untuk pengambilan vektor.
Buat indeks vektor
Satu bucket vektor dapat berisi hingga 100 indeks vektor.
Laju permintaan untuk operasi API PutVectorIndex dibatasi hingga 5 permintaan per detik.
Konsol
Pada halaman Vector Bucket, klik bucket vektor Anda.
Pada halaman Vector Indexes, klik Create Index Table.
Konfigurasikan parameter indeks:
Index Table Name: Harus terdiri dari 1 hingga 63 karakter, hanya berisi huruf dan angka, dimulai dengan huruf, serta unik dalam bucket vektor tersebut.
Vector Data Type: Nilai default sistem adalah
float32(floating-point).Dimension: 1 hingga 4.096. Semua vektor yang ditambahkan ke indeks ini harus memiliki dimensi yang sama.
Distance Metric: Pilih metode perhitungan jarak berdasarkan kasus penggunaan Anda.
Euclidean Distance: Jarak garis lurus antara dua titik dalam ruang. Metrik ini cocok untuk mengukur perbedaan nilai numerik.
Cosine Distance: Mengukur perbedaan arah antara dua vektor. Metrik ini cocok untuk pencarian kemiripan semantik berdimensi tinggi, seperti pada penyematan teks atau gambar.
Metadata Configuration: Konfigurasikan bidang metadata non-filterable untuk menyimpan informasi tambahan mengenai data vektor. Informasi ini tidak digunakan dalam filter pencarian. Batasan berikut berlaku:
Jumlah bidang metadata: 1 hingga 100
Panjang setiap kunci metadata: 1 hingga 63 byte
Klik OK untuk membuat indeks.
ossutil
Buat indeks bernama index untuk bucket examplebucket. Indeks ini memiliki dimensi vektor 512, menggunakan tipe data float32, dan metrik jarak euclidean.
ossutil vectors-api put-vector-index --bucket examplebucket --index-name index --data-type float32 --dimension 512 --distance-metric euclidean
SDK
Python
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
parser = argparse.ArgumentParser(description="vector put vector index sample")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--index_name', help='Nama indeks vektor.', required=True)
parser.add_argument('--account_id', help='ID akun.', required=True)
def main():
args = parser.parse_args()
# Muat kredensial dari variabel lingkungan
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Menggunakan konfigurasi default SDK
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
cfg.account_id = args.account_id
cfg.use_internal_endpoint = True # Untuk mengakses layanan melalui jaringan publik, atur parameter ini ke False atau hapus baris ini.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
vector_client = oss_vectors.Client(cfg)
result = vector_client.put_vector_index(oss_vectors.models.PutVectorIndexRequest(
bucket=args.bucket,
index_name=args.index_name,
dimension=512,
data_type='float32',
distance_metric='euclidean',
metadata={"nonFilterableMetadataKeys": ["key1", "key2"]}
))
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
if __name__ == "__main__":
main()Go
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", "", "Wilayah tempat bucket vektor berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket vektor.")
flag.StringVar(&accountId, "account-id", "", "ID Akun Alibaba Cloud.")
flag.StringVar(&indexName, "index", "", "Nama indeks vektor.")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, accountId wajib diisi")
}
if len(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, indeks wajib diisi")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// Untuk mengakses layanan melalui Internet publik, atur parameter ini ke false atau hapus baris ini.
WithUseInternalEndpoint(true)
client := vectors.NewVectorsClient(cfg)
request := &vectors.PutVectorIndexRequest{
Bucket: oss.Ptr(bucketName),
DataType: oss.Ptr("float32"),
Dimension: oss.Ptr(128),
DistanceMetric: oss.Ptr("cosine"),
IndexName: oss.Ptr(indexName),
Metadata: map[string]any{
"nonFilterableMetadataKeys": []string{"foo", "bar"},
},
}
result, err := client.PutVectorIndex(context.TODO(), request)
if err != nil {
log.Fatalf("gagal membuat indeks vektor: %v", err)
}
log.Printf("hasil pembuatan indeks vektor: %#v\n", result)
}Java
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.vectors.OSSVectorsClient;
import com.aliyun.sdk.service.oss2.vectors.models.PutVectorIndexRequest;
import com.aliyun.sdk.service.oss2.vectors.models.PutVectorIndexResult;
public class PutVectorIndexSample {
public static void main(String[] args) throws Exception {
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSVectorsClient client = OSSVectorsClient.newBuilder()
.region("cn-hangzhou")
.accountId("1234567890")
.credentialsProvider(provider)
.build()) {
PutVectorIndexRequest request = PutVectorIndexRequest.newBuilder()
.bucket("examplebucket")
.indexName("exampleindex")
.dataType("float32")
.dimension(3)
.distanceMetric("cosine")
.build();
PutVectorIndexResult result = client.putVectorIndex(request);
System.out.printf("status code: %d, request id: %s%n", result.statusCode(), result.requestId());
}
}
}API
Panggil operasi PutVectorIndex untuk membuat indeks vektor.
Mendapatkan Indeks Vektor
Konsol
Pada halaman Vector Bucket, klik bucket vektor yang telah Anda buat. Pada halaman Vector Indexes, Anda dapat melihat informasi indeks vektor.
ossutil
Ambil properti indeks vektor bernama index dalam bucket vektor examplebucket.
ossutil vectors-api get-vector-index --bucket examplebucket --index-name index
SDK
Python
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
parser = argparse.ArgumentParser(description="vector get vector index sample")
parser.add_argument('--region', help='Wilayah bucket.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain untuk mengakses OSS.')
parser.add_argument('--index_name', help='Nama indeks vektor.', required=True)
parser.add_argument('--account_id', help='ID akun.', required=True)
def main():
args = parser.parse_args()
# Muat kredensial dari variabel lingkungan
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Gunakan konfigurasi default SDK
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
cfg.account_id = args.account_id
cfg.use_internal_endpoint = True # Untuk mengakses OSS melalui jaringan publik, atur ini ke False atau hapus baris ini.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
vector_client = oss_vectors.Client(cfg)
result = vector_client.get_vector_index(oss_vectors.models.GetVectorIndexRequest(
bucket=args.bucket,
index_name=args.index_name,
))
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
if result.index:
print(f'nama indeks: {result.index}')
if __name__ == "__main__":
main()Go
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
indexName string
accountId string
)
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&indexName, "index", "", "Nama indeks vektor.")
flag.StringVar(&accountId, "account-id", "", "ID Akun Alibaba Cloud.")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
if len(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, indeks wajib diisi")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, accountId wajib diisi")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// Untuk mengakses layanan melalui titik akhir publik, atur ini ke false atau hapus baris ini.
WithUseInternalEndpoint(true)
client := vectors.NewVectorsClient(cfg)
request := &vectors.GetVectorIndexRequest{
Bucket: oss.Ptr(bucketName),
IndexName: oss.Ptr(indexName),
}
result, err := client.GetVectorIndex(context.TODO(), request)
if err != nil {
log.Fatalf("gagal mengambil indeks vektor %v", err)
}
log.Printf("hasil pengambilan indeks vektor:%#v\n", result)
}Java
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.vectors.OSSVectorsClient;
import com.aliyun.sdk.service.oss2.vectors.models.GetVectorIndexRequest;
import com.aliyun.sdk.service.oss2.vectors.models.GetVectorIndexResult;
public class GetVectorIndexSample {
public static void main(String[] args) throws Exception {
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSVectorsClient client = OSSVectorsClient.newBuilder()
.region("cn-hangzhou")
.accountId("1234567890")
.credentialsProvider(provider)
.build()) {
GetVectorIndexRequest request = GetVectorIndexRequest.newBuilder()
.bucket("examplebucket")
.indexName("exampleindex")
.build();
GetVectorIndexResult result = client.getVectorIndex(request);
System.out.printf("status code: %d, request id: %s%n", result.statusCode(), result.requestId());
}
}
}API
Panggil operasi GetVectorIndex untuk mengambil informasi mengenai indeks vektor.
Daftar indeks vektor
Operasi API ListVectorIndexes mengembalikan hingga 500 indeks per permintaan. Anda dapat menggunakan paginasi untuk mengambil batch berikutnya dari daftar indeks. Batas konkurensi untuk operasi ini adalah 16.
Konsol
Pada halaman Vector Bucket, klik bucket vektor Anda. Halaman Vector Indexes akan terbuka dan menampilkan semua indeks vektor dalam bucket vektor saat ini.
ossutil
Tampilkan semua indeks vektor dalam bucket vektor bernama examplebucket.
ossutil vectors-api list-vector-indexes --bucket examplebucket
SDK
Python
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
parser = argparse.ArgumentParser(description="list vector indexes sample")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--endpoint', help='Titik akhir akses OSS.')
parser.add_argument('--account_id', help='ID akun.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
def main():
args = parser.parse_args()
# Muat nilai kredensial dari variabel lingkungan.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Gunakan konfigurasi default SDK.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
cfg.account_id = args.account_id
cfg.use_internal_endpoint = True # Untuk terhubung melalui jaringan publik, atur ini ke False atau hapus baris ini.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss_vectors.Client(cfg)
# Buat paginator untuk operasi ListVectorIndexes.
paginator = client.list_vector_indexes_paginator()
# Iterasi melalui halaman-halaman indeks vektor.
for page in paginator.iter_page(oss_vectors.models.ListVectorIndexesRequest(
bucket=args.bucket
)
):
for o in page.indexes:
print(f'Indeks: {o.get("indexName")}, {o.get("dataType")}, {o.get("dimension")}, {o.get("status")}')
if __name__ == "__main__":
main()Go
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
)
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket vektor berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket vektor.")
flag.StringVar(&accountId, "account-id", "", "ID Akun Alibaba Cloud Anda.")
}
func main() {
flag.Parse()
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, bucket wajib diisi")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, accountId wajib diisi")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// Untuk mengakses layanan melalui Internet publik, atur parameter ini ke false atau hapus baris ini.
WithUseInternalEndpoint(true)
client := vectors.NewVectorsClient(cfg)
request := &vectors.ListVectorIndexesRequest{
Bucket: oss.Ptr(bucketName),
}
p := client.NewListVectorIndexesPaginator(request)
var i int
log.Println("Indeks Vektor:")
for p.HasNext() {
i++
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("gagal mendapatkan halaman %v, %v", i, err)
}
// Catat indeks yang ditemukan.
for _, index := range page.Indexes {
log.Printf("indeks:%v, %v, %v, %v\n", oss.ToString(index.IndexName), oss.ToTime(index.CreateTime), oss.ToString(index.DataType), oss.ToString(index.Status))
}
}
}Java
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.vectors.OSSVectorsClient;
import com.aliyun.sdk.service.oss2.vectors.models.ListVectorIndexesRequest;
import com.aliyun.sdk.service.oss2.vectors.models.ListVectorIndexesResult;
public class ListVectorIndexesSample {
public static void main(String[] args) throws Exception {
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSVectorsClient client = OSSVectorsClient.newBuilder()
.region("cn-hangzhou")
.accountId("1234567890")
.credentialsProvider(provider)
.build()) {
ListVectorIndexesRequest request = ListVectorIndexesRequest.newBuilder()
.bucket("examplebucket")
.build();
ListVectorIndexesResult result = client.listVectorIndexes(request);
System.out.printf("status code: %d, request id: %s%n", result.statusCode(), result.requestId());
}
}
}API
Panggil operasi ListVectorIndexes untuk menampilkan semua indeks vektor dalam bucket vektor.
Hapus indeks vektor
Menghapus indeks vektor juga akan menghapus seluruh data vektor yang dikandungnya. Operasi ini tidak dapat dikembalikan. Lakukan dengan hati-hati dan cadangkan data penting terlebih dahulu.
Konsol
Pada halaman Vector Bucket, klik bucket vektor yang telah Anda buat. Pada halaman Vector Indexes, pilih indeks yang akan dihapus dan konfirmasi penghapusan.
ossutil
Hapus indeks vektor bernama index dari bucket bernama examplebucket.
ossutil vectors-api delete-vector-index --bucket examplebucket --index-name index
SDK
Python
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
parser = argparse.ArgumentParser(description="vector delete vector index sample")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Titik akhir untuk mengakses OSS.')
parser.add_argument('--index_name', help='Nama indeks vektor.', required=True)
parser.add_argument('--account_id', help='ID Akun Alibaba Cloud Anda.', required=True)
def main():
args = parser.parse_args()
# Memuat nilai kredensial dari variabel lingkungan
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Menggunakan konfigurasi default SDK
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
cfg.account_id = args.account_id
cfg.use_internal_endpoint = True # Untuk mengakses OSS melalui jaringan publik, atur parameter ini ke False atau hapus baris ini.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
vector_client = oss_vectors.Client(cfg)
result = vector_client.delete_vector_index(oss_vectors.models.DeleteVectorIndexRequest(
bucket=args.bucket,
index_name=args.index_name,
))
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
if __name__ == "__main__":
main()Go
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
indexName string
accountId string
)
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket vektor berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket vektor.")
flag.StringVar(&indexName, "index", "", "Nama indeks vektor.")
flag.StringVar(&accountId, "account-id", "", "ID Akun Alibaba Cloud.")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah wajib diisi")
}
if len(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, indeks wajib diisi")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, accountId wajib diisi")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// Untuk mengakses OSS melalui Internet, atur ini ke false atau hapus baris ini.
WithUseInternalEndpoint(true)
client := vectors.NewVectorsClient(cfg)
request := &vectors.DeleteVectorIndexRequest{
Bucket: oss.Ptr(bucketName),
IndexName: oss.Ptr(indexName),
}
result, err := client.DeleteVectorIndex(context.TODO(), request)
if err != nil {
log.Fatalf("gagal menghapus indeks vektor %v", err)
}
log.Printf("hasil penghapusan indeks vektor:%#v\n", result)
}Java
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.vectors.OSSVectorsClient;
import com.aliyun.sdk.service.oss2.vectors.models.DeleteVectorIndexRequest;
import com.aliyun.sdk.service.oss2.vectors.models.DeleteVectorIndexResult;
public class DeleteVectorIndexSample {
public static void main(String[] args) throws Exception {
CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
try (OSSVectorsClient client = OSSVectorsClient.newBuilder()
.region("cn-hangzhou")
.accountId("1234567890")
.credentialsProvider(provider)
.build()) {
DeleteVectorIndexRequest request = DeleteVectorIndexRequest.newBuilder()
.bucket("examplebucket")
.indexName("exampleindex")
.build();
DeleteVectorIndexResult result = client.deleteVectorIndex(request);
System.out.printf("status code: %d, request id: %s%n", result.statusCode(), result.requestId());
}
}
}API
Panggil operasi DeleteVectorIndex untuk menghapus indeks vektor.