向量索引 Index 用於儲存和管理向量Bucket中的向量資料。每個 Index 定義了向量的維度、距離度量方法和中繼資料結構,為向量檢索提供基礎。
建立向量 Index
單個向量 Bucket 中最多可建立 100 張向量索引。
建立向量索引的 API (PutVectorIndex)請求頻率限制為最多每秒 5 次。
OSS Vectors 支援建立 Standard Mode 和 Fusion Mode 兩種向量 Index。Fusion Mode 支援在單個 Index 中定義多個向量欄位、標量欄位以及全文檢索索引欄位,需通過單獨的 PutVectorIndexFusion 介面建立,目前僅支援通過 ossutil、SDK 和 API 建立,控制台暫不支援。Fusion Mode 目前處於邀測階段。
Standard Mode
控制台
在向量Bucket頁面,單擊已建立的向量Bucket。
在索引列表頁面,單擊建立索引表。
配置索引參數:
索引表名稱:1~63字元,由英文字母、數字組成,首字母必須為英文字母,在向量 Bucket 內全域唯一。
向量資料類型:系統預設float32:浮點型。
向量維度:1~4096維,添加到此索引中的所有向量必須具有完全相同的數值個數。
距離度量函數:根據業務情境選擇距離計算方式。
歐氏距離:空間中兩點間的直線距離,適用于衡量數值差異。
餘弦距離:衡量兩個向量在方向上的差異,適用於文本、映像等高維語義相似性計算。
中繼資料配置:配置非過濾中繼資料欄位,用於儲存不參與搜尋過濾的附加資訊,作為向量資料的描述資訊。非過濾中繼資料配置。有如下輸入限制:
中繼資料個數為 1~100 個
每個中繼資料主鍵名稱的長度 1~63 位元組
單擊確定完成建立。
ossutil
為儲存桶 examplebucket 建立 index 索引:向量維度 512,資料類型float32,距離度量 euclidean。
ossutil vectors-api put-vector-index --bucket examplebucket --index-name index --data-type float32 --dimension 512 --distance-metric euclideanSDK
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='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--index_name', help='The name of the vector index.', required=True)
parser.add_argument('--account_id', help='The account id.', required=True)
def main():
args = parser.parse_args()
# Loading credentials values from the environment variables
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Using the SDK's default configuration
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 # 如需通過公網訪問,請將此處設定為False或刪除此行
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", "", "The region in which the vector bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
flag.StringVar(&accountId, "account-id", "", "The id of vector account.")
flag.StringVar(&indexName, "index", "", "The name of 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, accounId required")
}
if len(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, index required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// 如需通過公網訪問,請將此處設定為false或刪除此行
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("failed to put vector index%v", err)
}
log.Printf("put vector index result:%#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
調用PutVectorIndex介面以建立向量Index。
Fusion Mode
Fusion Mode 需通過單獨的 PutVectorIndexFusion 介面建立,請求體中通過 schemaConfiguration 定義 Index 的欄位結構。您可以通過 ossutil、SDK 或 API 建立。
ossutil
命令格式
ossutil vectors-api invoke-operation --op-name putVectorIndexFusion --method POST --parameters putVectorIndexFusion --bucket value --body value
參數說明
|
參數 |
類型 |
說明 |
|
--op-name |
string |
操作名稱,固定為 |
|
--method |
string |
HTTP要求方法,固定為 |
|
--parameters |
stringArray |
查詢參數,固定為 |
|
--bucket |
string |
向量Bucket名稱。 |
|
--body |
string |
請求體,JSON格式,用於描述Fusion模式向量索引的配置。body中各欄位的含義請參見PutVectorIndexFusion介面文檔。 |
-
本命令通過ossutil的泛化命令invoke-operation調用PutVectorIndexFusion介面發起請求。
-
關於支援的全域命令列選項,請參見支援的全域命令列選項。
使用樣本
在名為examplebucket的向量Bucket中建立名為my_index的Fusion模式向量索引。
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='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--index_name', help='The name of the fusion vector index.', required=True)
parser.add_argument('--account_id', help='The account id.', required=True)
def main():
args = parser.parse_args()
# Loading credentials values from the environment variables
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Using the SDK's default configuration
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)
# Put vector index 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", "", "The region in which the vector bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
flag.StringVar(&accountId, "account-id", "", "The id of vector account.")
flag.StringVar(&indexName, "index", "", "The name of 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, accountId required")
}
if len(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, index required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId)
client := vectors.NewVectorsClient(cfg)
// 手動構造 PutVectorIndexFusion 的 JSON 請求體
bodyMap := map[string]any{
"indexName": indexName,
"mode": "fusion",
"schemaConfiguration": map[string]any{
"fields": []map[string]any{
{
"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": map[string]any{
"enabled": true,
"analyzer": "standard",
"analyzerParameters": map[string]any{
"caseSensitive": false,
"delimitWord": false,
},
},
},
{
"name": "category",
"type": "string",
"isArray": true,
},
{
"name": "year",
"type": "long",
},
}
{
"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("failed to marshal body: %v", err)
}
// 手動構造 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),
}
// 直接調用 InvokeOperation
output, err := client.InvokeOperation(context.TODO(), input)
if err != nil {
log.Fatalf("failed to put vector index fusion: %v", err)
}
if output.Body != nil {
output.Body.Close()
}
log.Printf("put vector index fusion success, 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";
// 構造 PutVectorIndexFusion 的 JSON 請求體
String putIndexJson = "{
" +
" \"indexName\": \"" + indexName + "\",
" +
" \"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\"
" +
" }
" +
" ]
" +
" }
" +
"}";
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("Failed to calculate MD5", e);
}
}
}API
調用PutVectorIndexFusion介面以建立 Fusion Mode 向量 Index。
擷取向量 Index 資訊
Standard Mode
控制台
在向量Bucket頁面,單擊已建立的向量Bucket,在索引列表頁面,可以查看向量 Index 資訊。
ossutil
擷取向量儲存空間examplebucket中向量名字為index的向量索引屬性。
ossutil vectors-api get-vector-index --bucket examplebucket --index-name indexSDK
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='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--index_name', help='The name of the vector index.', required=True)
parser.add_argument('--account_id', help='The account id.', required=True)
def main():
args = parser.parse_args()
# Loading credentials values from the environment variables
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Using the SDK's default configuration
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 # 如需通過公網訪問,請將此處設定為False或刪除此行
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'index name: {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", "", "The region in which the vector bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
flag.StringVar(&indexName, "index", "", "The name of the vector index.")
flag.StringVar(&accountId, "account-id", "", "The id of vector account.")
}
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(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, index required")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, accounId required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// 如需通過公網訪問,請將此處設定為false或刪除此行
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("failed to get vector index %v", err)
}
log.Printf("get vector index result:%#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
調用GetVectorIndex介面以擷取向量Index資訊。
Fusion Mode
Fusion Mode 向量 Index 通過相同的 GetVectorIndex 介面擷取,響應結果中會包含 mode 參數(取值為 standard 或 fusion),用於標識 Index 的類型。Fusion Mode 通過 schemaConfiguration 返回其欄位結構,而非 Standard Mode 返回的向量資料類型、向量維度、距離度量函數及非過濾中繼資料欄位。詳細參數請參見 GetVectorIndex 介面文檔。
列舉向量 Index 資訊
列舉向量索引的 API (ListVectorIndexes)每次最大返回索引個數 500,可分頁擷取下一批索引列表,並發度上限 16 個。
Standard Mode
控制台
在向量Bucket頁面,單擊已建立的向量Bucket,進入索引列表頁面,即列舉出當前向量Bucket下所有索引。
ossutil
列舉名為examplebucket的向量Bucket中所有向量索引。
ossutil vectors-api list-vector-indexes --bucket examplebucketSDK
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='The region in which the bucket is located.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--account_id', help='The account id.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
def main():
args = parser.parse_args()
# Loading credentials values from the environment variables
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Using the SDK's default configuration
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 # 如需通過公網訪問,請將此處設定為False或刪除此行
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss_vectors.Client(cfg)
# Create the Paginator for the ListVectorIndex operation
paginator = client.list_vector_indexes_paginator()
# Iterate through the vector index pages
for page in paginator.iter_page(oss_vectors.models.ListVectorIndexesRequest(
bucket=args.bucket
)
):
for o in page.indexes:
print(f'Index: {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", "", "The region in which the vector bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
flag.StringVar(&accountId, "account-id", "", "The id of vector account.")
}
func main() {
flag.Parse()
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket required")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, accounId required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// 如需通過公網訪問,請將此處設定為false或刪除此行
WithUseInternalEndpoint(true)
client := vectors.NewVectorsClient(cfg)
request := &vectors.ListVectorIndexesRequest{
Bucket: oss.Ptr(bucketName),
}
p := client.NewListVectorIndexesPaginator(request)
var i int
log.Println("Vector Indexes:")
for p.HasNext() {
i++
page, err := p.NextPage(context.TODO())
if err != nil {
log.Fatalf("failed to get page %v, %v", i, err)
}
// Log the objects found
for _, index := range page.Indexes {
log.Printf("index:%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
調用ListVectorIndexes介面以列舉向量Bucket中的所有向量索引。
Fusion Mode
列舉向量 Index 時,響應結果中每個 Index 會返回 mode 參數(取值為 standard 或 fusion)以標識其類型,同一向量Bucket下的 Standard Mode 與 Fusion Mode 向量 Index 可能同時出現在列舉結果中。對於 Fusion Mode 向量 Index,列舉介面僅返回基礎資訊(如 Index 名稱、mode、狀態、建立時間等),詳細參數請參見 ListVectorIndexes 介面文檔。如需擷取 Fusion Mode 向量 Index 完整的 schemaConfiguration 欄位結構,請調用 GetVectorIndex 介面擷取。
刪除向量 Index
刪除索引會同時刪除索引中的所有向量資料。刪除操作無法復原,請謹慎操作,確保已備份重要資料。
控制台
在向量Bucket頁面,單擊已建立的向量Bucket,進入索引列表頁面,選擇需要刪除的索引完成刪除操作。
ossutil
刪除向量儲存空間examplebucket中名為index的向量索引。
ossutil vectors-api delete-vector-index --bucket examplebucket --index-name indexSDK
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='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--index_name', help='The name of the vector index.', required=True)
parser.add_argument('--account_id', help='The account id.', required=True)
def main():
args = parser.parse_args()
# Loading credentials values from the environment variables
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Using the SDK's default configuration
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 # 如需通過公網訪問,請將此處設定為False或刪除此行
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", "", "The region in which the vector bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the vector bucket.")
flag.StringVar(&indexName, "index", "", "The name of the vector index.")
flag.StringVar(&accountId, "account-id", "", "The id of vector account.")
}
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(indexName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, index required")
}
if len(accountId) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, accountId required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region).WithAccountId(accountId).
// 如需通過公網訪問,請將此處設定為false或刪除此行
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("failed to delete vector index %v", err)
}
log.Printf("delete vector index result:%#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
調用DeleteVectorIndex介面以刪除向量索引。