Indeks vektor menyimpan dan mengelola data vektor dalam bucket vektor. Setiap indeks menentukan dimensi, metrik jarak, dan struktur metadata yang menjadi fondasi untuk pengambilan vektor.
Buat indeks vektor
Satu bucket vektor dapat berisi maksimal 100 indeks vektor.
Laju permintaan untuk operasi API PutVectorIndex dibatasi hingga 5 permintaan per detik.
OSS Vectors mendukung dua jenis indeks vektor: Mode Standar dan Mode Fusion. Indeks vektor mode Fusion memungkinkan Anda menentukan beberapa bidang vektor, bidang skalar, dan bidang teks lengkap dalam satu indeks. Indeks ini harus dibuat menggunakan operasi terpisah PutVectorIndexFusion, yang saat ini hanya didukung melalui ossutil, SDK, dan API. Konsol belum mendukungnya. Mode Fusion saat ini berada dalam pratinjau undangan.
Mode Standar
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, diawali 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 tentang 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 ukuran 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, ID akun 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.
Mode Fusion
Buat indeks vektor mode Fusion menggunakan operasi terpisah PutVectorIndexFusion. Tentukan struktur bidang indeks menggunakan parameter schemaConfiguration dalam badan permintaan. Anda dapat membuatnya menggunakan ossutil, SDK, atau API.
ossutil
Format perintah
ossutil vectors-api invoke-operation --op-name putVectorIndexFusion --method POST --parameters putVectorIndexFusion --bucket value --body valueParameter
Parameter | Tipe | Deskripsi |
--op-name | string | Nama operasi. Atur nilainya ke |
--method | string | Metode permintaan HTTP. Atur nilainya ke |
--parameters | stringArray | Parameter kueri. Atur nilainya ke |
--bucket | string | Nama bucket vektor. |
--body | string | Badan permintaan dalam format JSON yang menjelaskan konfigurasi indeks vektor mode Fusion. Untuk informasi lebih lanjut tentang bidang dalam badan permintaan, lihat dokumentasi API PutVectorIndexFusion. |
Perintah ini memanggil operasi PutVectorIndexFusion menggunakan perintah generik invoke-operation dari ossutil.
Untuk informasi lebih lanjut tentang opsi baris perintah global yang didukung, lihat Opsi baris perintah global yang didukung.
Contoh penggunaan
Buat indeks vektor mode Fusion bernama my_index dalam bucket vektor bernama examplebucket.
ossutil vectors-api invoke-operation --op-name putVectorIndexFusion --method POST --parameters putVectorIndexFusion --bucket examplebucket --body '{"indexName":"my_index","mode":"fusion","schemaConfiguration":{"fields":[{"name":"text_vector","type":"vector","dataType":"float32","dimension":4,"distanceMetric":"cosine"},{"name":"image_vector","type":"vector","dataType":"float32","dimension":4,"distanceMetric":"cosine"},{"name":"title","type":"string","exactMatch":false,"text":{"enabled":true,"analyzer":"standard","analyzerParameters":{"caseSensitive":false,"delimitWord":false}}},{"name":"category","type":"string","isArray":true},{"name":"year","type":"long"}]}}'SDK
Python
import argparse
import base64
import hashlib
import json
from requests.structures import CaseInsensitiveDict
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors
from alibabacloud_oss_v2 import OperationInput
parser = argparse.ArgumentParser(description="put vector index fusion 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 untuk mengakses OSS')
parser.add_argument('--index_name', help='Nama indeks vektor fusion.', 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
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss_vectors.Client(cfg)
# Buat indeks vektor fusion
json_data = json.dumps({
'indexName': args.index_name,
'mode': 'fusion',
'schemaConfiguration': {
'fields': [
{
'name': 'text_vector',
'type': 'vector',
'dataType': 'float32',
'dimension': 4,
'distanceMetric': 'cosine',
},
{
'name': 'image_vector',
'type': 'vector',
'dataType': 'float32',
'dimension': 4,
'distanceMetric': 'cosine',
},
{
'name': 'title',
'type': 'string',
'exactMatch': False,
'text': {
'enabled': True,
'analyzer': 'standard',
'analyzerParameters': {
'caseSensitive': False,
'delimitWord': False,
},
},
},
{
'name': 'category',
'type': 'string',
'isArray': True,
},
{
'name': 'year',
'type': 'long',
},
],
},
})
body = json_data.encode()
content_md5 = base64.b64encode(hashlib.md5(body).digest()).decode()
op_input = OperationInput(
op_name='PutVectorIndexFusion',
method='POST',
headers=CaseInsensitiveDict({
'Content-Type': 'application/json',
'Content-MD5': content_md5,
}),
parameters={
'putVectorIndexFusion': '',
},
bucket=args.bucket,
body=body,
)
op_output = client.invoke_operation(op_input)
print(f'PutVectorIndexFusion status code: {op_output.status_code},'
f' request id: {op_output.headers.get("x-oss-request-id", "")},')
if __name__ == "__main__":
main()Go
package main
import (
"bytes"
"context"
"encoding/json"
"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 vektor.")
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, ID akun 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)
client := vectors.NewVectorsClient(cfg)
// Susun manual badan permintaan JSON untuk PutVectorIndexFusion.
bodyMap := map[string]any{
"indexName": indexName,
"mode": "fusion",
"schemaConfiguration": map[string]any{
"fields": []map[string]any{
{
"name": "vector_1",
"type": "vector",
"dataType": "float32",
"dimension": 1024,
"distanceMetric": "cosine",
},
{
"name": "vector_2",
"type": "vector",
"dataType": "float32",
"dimension": 512,
"distanceMetric": "cosine",
},
{
"name": "timestamps",
"type": "long",
"isArray": true,
},
{
"name": "price",
"type": "double",
},
{
"name": "ip",
"type": "ip",
},
{
"name": "location",
"type": "geoPoint",
},
{
"name": "tag",
"type": "string",
},
{
"name": "user_id",
"type": "string",
"isPartitionKey": true,
},
{
"name": "tags",
"type": "string",
"isArray": true,
},
{
"name": "title_1",
"type": "string",
"exactMatch": true,
"text": map[string]any{
"enabled": true,
"analyzer": "standard",
"analyzerParameters": map[string]any{
"caseSensitive": true,
"delimitWord": false,
},
},
},
{
"name": "title_2",
"type": "string",
"exactMatch": false,
"text": map[string]any{
"enabled": true,
"analyzer": "split",
"analyzerParameters": map[string]any{
"caseSensitive": true,
"delimiter": " ",
},
},
},
},
},
}
bodyBytes, err := json.Marshal(bodyMap)
if err != nil {
log.Fatalf("gagal marshal badan permintaan: %v", err)
}
// Susun manual OperationInput.
input := &oss.OperationInput{
OpName: "PutVectorIndexFusion",
Method: "POST",
Headers: map[string]string{
"Content-Type": "application/json",
},
Parameters: map[string]string{
"putVectorIndexFusion": "",
},
Bucket: oss.Ptr(bucketName),
Body: bytes.NewReader(bodyBytes),
}
// Panggil InvokeOperation secara langsung.
output, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
log.Fatalf("gagal membuat indeks vektor fusion: %v", err)
}
if output.Body != nil {
output.Body.Close()
}
log.Printf("berhasil membuat indeks vektor fusion, status code: %d\n", output.StatusCode)
}Java
import com.aliyun.sdk.service.oss2.OperationInput;
import com.aliyun.sdk.service.oss2.OperationOptions;
import com.aliyun.sdk.service.oss2.OperationOutput;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.transport.BinaryData;
import com.aliyun.sdk.service.oss2.utils.Base64Utils;
import com.aliyun.sdk.service.oss2.vectors.OSSVectorsClient;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
public class PutVectorIndexFusionSample {
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()) {
String bucket = "examplebucket";
String indexName = "exampleindex";
// Susun badan permintaan JSON untuk PutVectorIndexFusion.
String putIndexJson = "{\n" +
" \"indexName\": \"" + indexName + "\",\n" +
" \"mode\": \"fusion\",\n" +
" \"schemaConfiguration\": {\n" +
" \"fields\": [\n" +
" {\n" +
" \"name\": \"embedding\",\n" +
" \"type\": \"vector\",\n" +
" \"dataType\": \"float32\",\n" +
" \"dimension\": 5,\n" +
" \"distanceMetric\": \"cosine\"\n" +
" },\n" +
" {\n" +
" \"name\": \"category\",\n" +
" \"type\": \"string\"\n" +
" },\n" +
" {\n" +
" \"name\": \"title\",\n" +
" \"type\": \"string\",\n" +
" \"exactMatch\": false,\n" +
" \"text\": {\n" +
" \"enabled\": true,\n" +
" \"analyzer\": \"standard\",\n" +
" \"analyzerParameters\": {\n" +
" \"caseSensitive\": false,\n" +
" \"delimitWord\": false\n" +
" }\n" +
" }\n" +
" },\n" +
" {\n" +
" \"name\": \"year\",\n" +
" \"type\": \"long\"\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
Map<String, String> putIndexHeaders = new HashMap<>();
putIndexHeaders.put("Content-Type", "application/json");
putIndexHeaders.put("Content-MD5", calculateContentMD5(putIndexJson));
Map<String, String> putIndexParameters = new HashMap<>();
putIndexParameters.put("putVectorIndexFusion", "");
OperationInput putIndexInput = OperationInput.newBuilder()
.opName("PutVectorIndexFusion")
.method("POST")
.bucket(bucket)
.headers(putIndexHeaders)
.parameters(putIndexParameters)
.body(BinaryData.fromString(putIndexJson))
.build();
OperationOutput putIndexOutput = client.invokeOperation(putIndexInput, OperationOptions.defaults());
System.out.println("PutVectorIndexFusion status code: " + putIndexOutput.statusCode() +
", request id: " + putIndexOutput.headers().get("x-oss-request-id"));
}
}
private static String calculateContentMD5(String content) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] digest = md.digest(content.getBytes(StandardCharsets.UTF_8));
return Base64Utils.encodeToString(digest);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("Gagal menghitung MD5", e);
}
}
}API
Panggil operasi PutVectorIndexFusion untuk membuat indeks vektor mode Fusion.
Ambil indeks vektor
Mode Standar
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, ID akun 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 tentang indeks vektor.
Mode Fusion
Indeks vektor mode Fusion diambil menggunakan operasi GetVectorIndex yang sama. Tanggapan mencakup parameter mode (standard atau fusion), yang mengidentifikasi jenis indeks tersebut. Indeks vektor mode Fusion mengembalikan struktur bidangnya dalam parameter schemaConfiguration, bukan tipe data vektor, dimensi, metrik jarak, dan bidang metadata non-filterable yang dikembalikan untuk indeks mode Standar. Untuk informasi lebih lanjut tentang parameter tersebut, lihat dokumentasi API GetVectorIndex.
Daftar indeks vektor
Operasi API ListVectorIndexes mengembalikan maksimal 500 indeks per permintaan. Anda dapat menggunakan pagination untuk mengambil batch berikutnya dari daftar indeks. Batas konkurensi untuk operasi ini adalah 16.
Mode Standar
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
Daftarkan 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, ID akun 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 mendaftarkan semua indeks vektor dalam bucket vektor.
Mode Fusion
Saat Anda mendaftarkan indeks vektor, tanggapan mengembalikan parameter mode (standard atau fusion) untuk setiap indeks guna mengidentifikasi jenisnya. Indeks vektor mode Standar dan mode Fusion dalam bucket vektor yang sama dapat muncul bersama dalam hasil daftar. Untuk indeks vektor mode Fusion, operasi daftar hanya mengembalikan informasi dasar, seperti nama indeks, mode, status, dan waktu pembuatan. Untuk informasi lebih lanjut tentang parameter tersebut, lihat dokumentasi API ListVectorIndexes. Untuk mengambil struktur bidang schemaConfiguration lengkap dari indeks vektor mode Fusion, panggil operasi GetVectorIndex.
Hapus indeks vektor
Menghapus indeks vektor juga akan menghapus semua data vektor yang dikandungnya. Operasi ini tidak dapat dikembalikan. Lakukan dengan hati-hati dan backup 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, ID akun 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.