All Products
Search
Document Center

Object Storage Service:Vektor

Last Updated:Sep 23, 2026

Data vektor merupakan resource inti dalam bucket vektor dan terdiri atas tiga bagian:

  • Key (primary key): Identifier unik untuk vektor.

  • Data (vector data): Array numerik berdimensi tinggi.

  • Metadata (metadata): Struktur pasangan kunci-nilai yang menyimpan atribut tambahan vektor, seperti kategori, sumber, atau timestamp. Informasi ini dapat digunakan untuk post-filtering selama kueri.

Setiap vektor disimpan dalam indeks vektor tertentu dan mewarisi konfigurasi dimensi, tipe data, serta metrik jarak dari indeks tersebut.

Menulis data vektor

Tulis data vektor beserta metadatanya ke indeks vektor yang ditentukan.

  • Satu indeks vektor dapat menyimpan hingga 2 miliar baris data vektor.

  • API PutVectors memiliki batas QPS sebesar 1.000. Satu permintaan dapat menulis batch hingga 500 vektor, dengan jumlah total vektor dari semua permintaan konkuren dibatasi hingga 2.500.

Catatan

API PutVectors berlaku untuk indeks vektor baik dalam mode Standard maupun mode Fusion. Beberapa parameter permintaan dan bidang respons berbeda pada mode Fusion. Untuk informasi selengkapnya, lihat PutVectors.

Konsol

  1. Pada halaman bucket vektor, klik bucket vektor yang dituju.

  2. Pada baris indeks yang baru dibuat, klik View data, lalu klik Vector data insertion.

  3. Konfigurasikan data vektor. Anda dapat menambahkan beberapa vektor sekaligus:

    • Primary Key Value: Tetapkan identifier unik untuk vektor.

    • Vector data: Masukkan array numerik untuk vektor dalam format array JSON, contohnya: [0.1, 0.2, 0.3, 0.4, 0.5]. Dimensi vektor harus sesuai dengan dimensi yang didefinisikan dalam indeks vektor.

    • Metadata: Tambahkan metadata, seperti kategori, judul, atau timestamp. Ukuran total maksimum adalah 200 KB.

      • Tipe metadata yang didukung mencakup String, Number, Boolean, dan List.

      • Satu vektor mendukung hingga 100 bidang metadata, baik yang dapat difilter maupun tidak dapat difilter.

      • Panjang kunci untuk bidang metadata yang tidak dapat difilter berkisar antara 1 hingga 63 karakter.

      • Ukuran maksimum satu bidang metadata yang dapat difilter adalah 2 KB.

      • Saat melakukan post-filtering pada metadata yang dapat difilter, ekspresi filter dapat mencapai ukuran 20 KB, berisi hingga 1.024 kondisi, dan menggunakan hingga 8 level nesting. Ekspresi kosong juga valid.

  4. Klik OK untuk memasukkan data.

SDK

Python

# Mengimpor modul yang diperlukan
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

# Menyiapkan parser argumen baris perintah
parser = argparse.ArgumentParser(description="contoh penggunaan put vectors vektor")
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()

    # 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  # Atur ke False atau hapus baris ini untuk mengakses layanan melalui jaringan publik.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)

    vectors = [
        {
            "data": {"float32":  [0.1] * 128},
            "key": "key1",
            "metadata": {"metadata1": "value1", "metadata2": "value2"}
        },
        {
            "data": {"float32": [0.2] * 128},
            "key": "key2",
            "metadata": {"metadata3": "value3", "metadata4": "value4"}
        }
    ]

    result = vector_client.put_vectors(oss_vectors.models.PutVectorsRequest(
        bucket=args.bucket,
        index_name=args.index_name,
        vectors=vectors,
    ))

    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
    )

if __name__ == "__main__":
    main()

Go

// Paket utama
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(&region, "region", "", "Wilayah tempat bucket vektor berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket vektor.")
	flag.StringVar(&accountId, "account-id", "", "ID Akun Alibaba Cloud.")
}

func main() {
	flag.Parse()
	if len(bucketName) == 0 || len(region) == 0 || len(accountId) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).WithAccountId(accountId).
		// Untuk menggunakan akses publik, atur parameter ini ke false atau hapus baris ini.
		WithUseInternalEndpoint(true)

	client := vectors.NewVectorsClient(cfg)

	request := &vectors.PutVectorsRequest{
		Bucket:    oss.Ptr(bucketName),
		IndexName: oss.Ptr("exampleIndex"),

		Vectors: [ ]map[string]any{

			{
				"key": "vector1",
				"data": map[string]any{

					"float32": [ ]float32{1.2, 2.5, 3},

				},
				"metadata": map[string]any{
					"Key1": "value2",

					"Key2": [ ]string{"1", "2", "3"},

				},
			},
		},
	}
	result, err := client.PutVectors(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal memasukkan vektor %v", err)
	}
	log.Printf("hasil memasukkan 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.PutVectorsRequest;
import com.aliyun.sdk.service.oss2.vectors.models.PutVectorsResult;
import java.util.*;

public class PutVectorsSample {
    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()) {
            List<Map<String, Object>> vectors = Arrays.asList(
                    createVector("key1", new Float[]{1.0f, 2.0f, 3.0f}, "description1"),
                    createVector("key2", new Float[]{4.0f, 5.0f, 6.0f}, "description2"));
            PutVectorsRequest request = PutVectorsRequest.newBuilder()
                    .bucket("examplebucket")
                    .indexName("exampleindex")
                    .vectors(vectors)
                    .build();
            PutVectorsResult result = client.putVectors(request);
            System.out.printf("kode status: %d, ID permintaan: %s%n", result.statusCode(), result.requestId());
        }
    }

    private static Map<String, Object> createVector(String key, Float[] data, String description) {
        Map<String, Object> vector = new HashMap<>();
        vector.put("key", key);
        Map<String, Object> vectorData = new HashMap<>();
        vectorData.put("float32", Arrays.asList(data));
        vector.put("data", vectorData);
        Map<String, String> meta = new HashMap<>();
        meta.put("description", description);
        vector.put("metadata", meta);
        return vector;
    }
}

ossutil

Contoh ini menambahkan satu vektor ke indeks vektor bernama index dalam bucket vektor bernama examplebucket. Data vektornya adalah [1], kunci primernya adalah vector1, dan metadatanya adalah {"Key1": "32"}.

  • Gunakan file konfigurasi JSON. Konten berikut terdapat dalam file vectors.json:

    [
      {
        "data": {
          "float32": [1]
        },
        "key": "vector1",
        "metadata": {
          "Key1": "32"
        }
      }
    ]

    Contoh perintah:

    ossutil vectors-api put-vectors --bucket examplebucket --index-name index --vectors file://vectors.json
  • Gunakan parameter konfigurasi JSON:

    ossutil vectors-api put-vectors --bucket examplebucket --index-name index --vectors "[{\"data\":{\"float32\":[1]},\"key\":\"vector1\",\"metadata\":{\"Key1\":\"32\"}}]"

API

Panggil API PutVectors untuk menulis data vektor.

Pencarian vektor

Pencarian vektor memanfaatkan konten semantik, metadata, dan kondisi lainnya untuk menemukan data target secara cepat. Fitur ini menyediakan latensi pencarian di bawah satu detik dengan tingkat recall sekitar 90%.

Mode Standard

Indeks mode Standard menggunakan API QueryVectors untuk melakukan pencarian kemiripan vektor.

Konsol

Konsol hanya mendukung pencarian kemiripan vektor tunggal. Untuk pencarian iteratif, gunakan API atau SDK.

  1. Pada halaman bucket vektor, klik bucket vektor target.

  2. Pada baris indeks target, klik View data, lalu klik Vector Data Query.

  3. Konfigurasikan parameter pencarian:

    • Vector data: Masukkan vektor kueri dalam format array JSON, konsisten dengan cara data vektor dimasukkan. Contohnya: [0.15, 0.25, 0.35, 0.45, 0.55].

    • Filterable metadata: Tentukan metadata, seperti kategori atau rentang waktu, untuk memfilter hasil.

    • TopK (Jumlah hasil): Tetapkan jumlah hasil paling mirip yang akan dikembalikan. Nilainya harus dalam rentang 1 hingga 30.

    • Return similarity distance: Pilih apakah akan menyertakan jarak kemiripan dalam hasil.

    • Return metadata: Pilih apakah akan menyertakan metadata vektor dalam hasil.

  4. Klik OK untuk menjalankan kueri.

Sistem akan mengembalikan daftar vektor yang diurutkan berdasarkan kemiripan.

SDK

Python

# Mengimpor modul yang diperlukan
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

# Menyiapkan parser argumen baris perintah
parser = argparse.ArgumentParser(description="contoh kueri vektor")
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()

    # 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 layanan melalui jaringan publik, atur ke False atau hapus baris ini.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)

    query_filter = {
        "$and": [{
            "type": {
                "$nin": ["comedy", "documentary"]
            }
        }]
    }

    query_vector = {"float32": [0.1] * 128}

    result = vector_client.query_vectors(oss_vectors.models.QueryVectorsRequest(
        bucket=args.bucket,
        index_name=args.index_name,
        filter=query_filter,
        query_vector=query_vector,
        return_distance=True,
        return_metadata=True,
        top_k=10
    ))

    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          )

    if result.vectors:
        for vector in result.vectors:
            print(f'vektor: {vector}')


if __name__ == "__main__":
    main()

Go

// Paket utama
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(&region, "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, account-id 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 melalui internet publik, atur ke false atau hapus baris ini.
		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{1.5, 2.5, 3.5},
		},
		ReturnMetadata: oss.Ptr(true),
		ReturnDistance: oss.Ptr(true),
		TopK:           oss.Ptr(10),
	}
	result, err := client.QueryVectors(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menjalankan kueri vektor %v", err)
	}
	log.Printf("hasil kueri 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.QueryVectorsRequest;
import com.aliyun.sdk.service.oss2.vectors.models.QueryVectorsResult;
import java.util.*;

public class QueryVectorsSample {
    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()) {
            Map<String, Object> queryVector = new HashMap<>();
            queryVector.put("float32", new float[]{0.1f, 0.2f, 0.3f});
            QueryVectorsRequest request = QueryVectorsRequest.newBuilder()
                    .bucket("examplebucket")
                    .indexName("exampleindex")
                    .queryVector(queryVector)
                    .topK(10)
                    .returnDistance(true)
                    .returnMetadata(false)
                    .build();
            QueryVectorsResult result = client.queryVectors(request);
            System.out.printf("kode status: %d, ID permintaan: %s%n", result.statusCode(), result.requestId());
        }
    }
}

ossutil

Perintah berikut mencari 10 vektor teratas dalam indeks vektor 'index' di bucket vektor 'examplebucket' yang paling mirip dengan vektor kueri dan memiliki 'type' berupa 'comedy' atau 'documentary'.

ossutil vectors-api query-vectors --bucket examplebucket --index-name index --filter "{\"$and\":[{\"type\":{\"$in\":[\"comedy\",\"documentary\"]}}]}" --query-vector "{\"float32\":[32]}" --top-k 10

API

Panggil API QueryVectors untuk melakukan pencarian kemiripan vektor.

Mode Fusion

Indeks mode Fusion menggunakan API QueryVectorsFusion untuk pengambilan data, yang mendukung pencarian vektor, pemfilteran skalar, pencarian teks lengkap, dan fusi recall multi-cara. Berbeda dengan QueryVectors yang mengembalikan hasil berdasarkan jarak, QueryVectorsFusion mengembalikan hasil berdasarkan skor relevansi—semakin tinggi skornya, semakin relevan hasilnya. Mode Fusion saat ini tidak didukung melalui Konsol; gunakan SDK, ossutil, atau API sebagai gantinya.

SDK

Python

# Mengimpor modul yang diperlukan
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

# Menyiapkan parser argumen baris perintah
parser = argparse.ArgumentParser(description="contoh kueri vektor fusion")
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 fusion.', required=True)
parser.add_argument('--account_id', help='ID akun.', required=True)


def main():
    args = parser.parse_args()

    # Memuat 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)

    # Kueri vektor fusion
    json_data = json.dumps({
        'indexName': args.index_name,
        'knn': [
            {
                'field': 'text_vector',
                'queryVector': [0.1, 0.2, 0.3, 0.4],
                'topK': 10,
                'numCandidates': 100,
                'filter': {
                    'year': {
                        '$gte': 2020,
                    },
                },
            },
        ],
        'query': {
            'title': {
                '$textMatch': {
                    'value': 'vector search',
                    'boost': 2.0,
                },
            },
        },
        'returnMetadata': True,
        'returnMetadataFields': ['title', 'category', 'year'],
        'limit': 10,
        'sort': [
            {
                '_score': {
                    'order': 'desc',
                },
            },
        ],
    })
    body = json_data.encode()
    content_md5 = base64.b64encode(hashlib.md5(body).digest()).decode()
    op_input = OperationInput(
        op_name='QueryVectorsFusion',
        method='POST',
        headers=CaseInsensitiveDict({
            'Content-Type': 'application/json',
            'Content-MD5': content_md5,
        }),
        parameters={
            'queryVectorsFusion': '',
        },
        bucket=args.bucket,
        body=body,
    )
    op_output = client.invoke_operation(op_input)
    print(f'Kode status QueryVectorsFusion: {op_output.status_code},'
          f' ID permintaan: {op_output.headers.get("x-oss-request-id", "")},'
          f' konten: {op_output.http_response.content},')


if __name__ == "__main__":
    main()

Go

// Paket utama
package main

import (
	"bytes"
	"context"
	"encoding/json"
	"flag"
	"fmt"
	"io"
	"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(&region, "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, 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)

	client := vectors.NewVectorsClient(cfg)

	// Membangun manual badan permintaan JSON untuk QueryVectorsFusion.
	// knn (pengambilan vektor) dan query (pemfilteran skalar dan teks lengkap) dapat digabungkan.
	// knn adalah array objek dan mendukung hingga 3 elemen.
	bodyMap := map[string]any{
		"indexName": indexName,
		"knn": []map[string]any{
			{
				"field":         "text_vector",
				"queryVector":   []float32{float32(32)},
				"topK":          10,
				"numCandidates": 9,
				"filter": map[string]any{
					"meta_field_1": map[string]any{
						"$eq": "abc",
					},
				},
				"boost": 1,
			},
		},
		"query": map[string]any{
			"$and": []map[string]any{
				{"type": map[string]any{"$in": []string{"a", "b"}}},
				{"year": map[string]any{"$gte": 2020}},
			},
		},
		"returnMetadata":       true,
		"returnMetadataFields": []string{"key1", "key2"},
		"partitionKeys":        []string{"key1", "key2"},
		"limit":                10,
		"sort": []map[string]any{
			{
				"field_a":     map[string]any{"order": "asc"},
				"_score":      map[string]any{"order": "desc"},
				"_primaryKey": map[string]any{"order": "asc"},
			},
		},
	}

	bodyBytes, err := json.Marshal(bodyMap)
	if err != nil {
		log.Fatalf("gagal marshal badan: %v", err)
	}

	// Membangun manual OperationInput.
	input := &oss.OperationInput{
		OpName: "QueryVectorsFusion",
		Method: "POST",
		Headers: map[string]string{
			"Content-Type": "application/json",
		},
		Parameters: map[string]string{
			"queryVectorsFusion": "",
		},
		Bucket: oss.Ptr(bucketName),
		Body:   bytes.NewReader(bodyBytes),
	}

	// Memanggil InvokeOperation secara langsung.
	output, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		log.Fatalf("gagal menjalankan kueri vektor fusion: %v", err)
	}
	defer func() {
		if output.Body != nil {
			output.Body.Close()
		}
	}()

	// Membaca dan mengurai respons.
	body, err := io.ReadAll(output.Body)
	if err != nil {
		log.Fatalf("gagal membaca badan respons: %v", err)
	}

	var result map[string]any
	if err := json.Unmarshal(body, &result); err != nil {
		log.Fatalf("gagal unmarshal respons: %v", err)
	}
	fmt.Printf("hasil kueri vektor fusion: %#v\n", result)
}

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 QueryVectorsFusionSample {
    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";

            // Membangun badan permintaan JSON untuk QueryVectorsFusion. Gunakan retriever.rrf untuk fusi recall multi-cara.
            String queryVectorsJson = "{
" +
                    "  \"indexName\": \"" + indexName + "\",
" +
                    "  \"knn\": [
" +
                    "    {
" +
                    "      \"field\": \"text_vector\",
" +
                    "      \"queryVector\": [0.1, 0.2, 0.3, 0.4],
" +
                    "      \"topK\": 10,
" +
                    "      \"numCandidates\": 100,
" +
                    "      \"filter\": {
" +
                    "        \"year\": {\"$gte\": 2020}
" +
                    "      }
" +
                    "    }
" +
                    "  ],
" +
                    "  \"query\": {
" +
                    "    \"title\": {
" +
                    "      \"$textMatch\": {
" +
                    "        \"value\": \"vector search\",
" +
                    "        \"boost\": 2.0
" +
                    "      }
" +
                    "    }
" +
                    "  },
" +
                    "  \"returnMetadata\": true,
" +
                    "  \"returnMetadataFields\": [\"title\", \"category\", \"year\"],
" +
                    "  \"limit\": 10
" +
                    "}";

            Map<String, String> queryVectorsHeaders = new HashMap<>();
            queryVectorsHeaders.put("Content-Type", "application/json");
            queryVectorsHeaders.put("Content-MD5", calculateContentMD5(queryVectorsJson));

            Map<String, String> queryVectorsParameters = new HashMap<>();
            queryVectorsParameters.put("queryVectorsFusion", "");

            OperationInput queryVectorsInput = OperationInput.newBuilder()
                    .opName("QueryVectorsFusion")
                    .method("POST")
                    .bucket(bucket)
                    .headers(queryVectorsHeaders)
                    .parameters(queryVectorsParameters)
                    .body(BinaryData.fromString(queryVectorsJson))
                    .build();

            OperationOutput queryVectorsOutput = client.invokeOperation(queryVectorsInput, OperationOptions.defaults());

            System.out.println("Kode status QueryVectorsFusion: " + queryVectorsOutput.statusCode() +
                    ", ID permintaan: " + queryVectorsOutput.headers().get("x-oss-request-id") +
                    ", konten: " + new String(queryVectorsOutput.body().get().toBytes(), StandardCharsets.UTF_8));
        }
    }

    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);
        }
    }
}

ossutil

Format perintah

ossutil vectors-api invoke-operation --op-name queryVectorsFusion --method POST --parameters queryVectorsFusion --bucket value --body value

Parameter

Parameter

Tipe

Deskripsi

--op-name

string

Nama operasi. Tetapkan nilainya ke query-vectors-fusion.

--method

string

Metode permintaan HTTP. Tetapkan nilainya ke POST.

--parameters

stringArray

Parameter kueri. Tetapkan nilainya ke query-vectors-fusion.

--bucket

string

Nama bucket vektor.

--body

string

Badan permintaan dalam format JSON yang menjelaskan kondisi kueri untuk pencarian vektor mode Fusion. Untuk informasi lebih lanjut tentang bidang dalam badan, lihat dokumentasi API QueryVectorsFusion.

Catatan
  • Perintah ini memanggil operasi QueryVectorsFusion 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

Dalam bucket vektor bernama examplebucket, kueri indeks vektor mode Fusion bernama my_index untuk mengembalikan 10 vektor teratas yang paling mirip dengan vektor kueri, beserta metadatanya.

ossutil vectors-api invoke-operation --op-name queryVectorsFusion --method POST --parameters queryVectorsFusion --bucket examplebucket --body '{"indexName":"my_index","knn":[{"field":"text_vector","queryVector":[0.1,0.2,0.3],"topK":10,"numCandidates":100}],"returnMetadata":true}'

API

Panggil API QueryVectorsFusion untuk melakukan pengambilan data pada indeks vektor mode Fusion.

Mengambil data vektor

Catatan

API GetVectors berlaku untuk indeks vektor baik dalam mode Standard maupun mode Fusion. Beberapa parameter permintaan dan bidang respons berbeda pada mode Fusion. Untuk informasi lebih lanjut, lihat GetVectors.

Konsol

Pada halaman bucket vektor, klik bucket vektor target untuk membuka halaman Vector Indexes. Klik nama indeks untuk melihat vektornya.

SDK

Python

# Mengimpor modul yang diperlukan
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

# Menyiapkan parser argumen baris perintah
parser = argparse.ArgumentParser(description="contoh ambil vektor")
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 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()

    # Memuat 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 melalui jaringan publik, atur ke False atau hapus baris ini.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)

    keys = ['key1', 'key2']

    result = vector_client.get_vectors(oss_vectors.models.GetVectorsRequest(
        bucket=args.bucket,
        index_name=args.index_name,
        keys=keys,
        return_data=True,
        return_metadata=True
    ))

    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          )

    if result.vectors:
        for vector in result.vectors:
            print(f'ID vektor: {vector}')


if __name__ == "__main__":
    main()

Go

// Paket utama
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(&region, "region", "", "Wilayah tempat bucket vektor berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket vektor.")
	flag.StringVar(&accountId, "account-id", "", "ID akun 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")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).WithAccountId(accountId).
		// Untuk mengakses melalui jaringan publik, atur ke false atau hapus baris ini.
		WithUseInternalEndpoint(true)

	client := vectors.NewVectorsClient(cfg)

	request := &vectors.GetVectorsRequest{
		Bucket:         oss.Ptr(bucketName),
		IndexName:      oss.Ptr("index"),
		Keys:           []string{"key1", "key2", "key3"},
		ReturnData:     oss.Ptr(true),
		ReturnMetadata: oss.Ptr(false),
	}
	result, err := client.GetVectors(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengambil vektor %v", err)
	}
	log.Printf("hasil mengambil 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.GetVectorsRequest;
import com.aliyun.sdk.service.oss2.vectors.models.GetVectorsResult;
import java.util.*;

public class GetVectorsSample {
    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()) {
            GetVectorsRequest request = GetVectorsRequest.newBuilder()
                    .bucket("examplebucket")
                    .indexName("exampleindex")
                    .keys(Arrays.asList("key1", "key2"))
                    .returnData(true)
                    .returnMetadata(true)
                    .build();
            GetVectorsResult result = client.getVectors(request);
            System.out.printf("kode status: %d, ID permintaan: %s%n", result.statusCode(), result.requestId());
        }
    }
}

ossutil

Ambil properti vektor dengan primary key key dan key1 dari indeks index dalam bucket vektor examplebucket.

ossutil vectors-api get-vectors --bucket examplebucket --index-name index --keys key,key1

API

Panggil API GetVectors untuk mengambil data vektor tertentu.

Menampilkan daftar data vektor

Catatan

API ListVectors berlaku untuk indeks vektor baik dalam mode Standard maupun mode Fusion. Beberapa parameter permintaan dan bidang respons berbeda pada mode Fusion. Untuk informasi lebih lanjut, lihat ListVectors.

Konsol

Pada halaman bucket vektor, klik bucket vektor target untuk membuka halaman Vector Indexes. Klik nama indeks untuk melihat vektor di dalamnya.

SDK

Python

# Mengimpor modul yang diperlukan
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

# Menyiapkan parser argumen baris perintah
parser = argparse.ArgumentParser(description="contoh daftar vektor")

parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--account_id', help='ID akun.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--index_name', help='Nama indeks vektor.', required=True)

def main():

    args = parser.parse_args()

    # Memuat 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  # Atur ke False atau hapus baris ini untuk mengakses layanan melalui jaringan publik.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    client = oss_vectors.Client(cfg)

    # Membuat paginator untuk operasi ListVectors
    paginator = client.list_vectors_paginator()

    # Membuat permintaan dengan bucket dan nama indeks
    request = oss_vectors.models.ListVectorsRequest(
        bucket=args.bucket,
        index_name=args.index_name
    )

    # Iterasi melalui halaman-halaman vektor
    for page in paginator.iter_page(request):
        for o in page.vectors:
            print(f'Vektor: {o}')

if __name__ == "__main__":
    main()

Go

```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(&region, "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(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket 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 menggunakan titik akhir publik, atur nilai ini menjadi false atau hapus baris ini.
		WithUseInternalEndpoint(true)

	client := vectors.NewVectorsClient(cfg)

	request := &vectors.ListVectorsRequest{
		Bucket:         oss.Ptr(bucketName),
		IndexName:      oss.Ptr(indexName),
		ReturnMetadata: oss.Ptr(true),
		ReturnData:     oss.Ptr(false),
	}

	p := client.NewListVectorsPaginator(request)

	var i int
	log.Println("Vectors:")
	for p.HasNext() {
		i++

		page, err := p.NextPage(context.TODO())
		if err != nil {
			log.Fatalf("gagal mendapatkan halaman %v, %v", i, err)
		}

		for _, v := range page.Vectors {
			log.Printf("vector:%v\n", v)
		}
	}
}
```

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.ListVectorsRequest;
import com.aliyun.sdk.service.oss2.vectors.models.ListVectorsResult;

public class ListVectorsSample {
    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()) {
            ListVectorsRequest request = ListVectorsRequest.newBuilder()
                    .bucket("examplebucket")
                    .indexName("exampleindex")
                    .build();
            ListVectorsResult result = client.listVectors(request);
            System.out.printf("status code: %d, request id: %s%n", result.statusCode(), result.requestId());
        }
    }
}

ossutil

Tampilkan semua vektor dalam indeks `index` di bucket vektor `examplebucket`.

ossutil vectors-api list-vectors --bucket examplebucket --index-name index

API

Panggil API ListVectors untuk menampilkan semua data vektor dalam indeks vektor.

Menghapus data vektor

Anda dapat menghapus data vektor secara batch. Operasi ini tidak dapat dikembalikan, jadi cadangkan data penting sebelum melanjutkan.

Catatan

API DeleteVectors berlaku untuk indeks vektor dalam mode Standard maupun mode Fusion. Beberapa parameter permintaan dan bidang respons berbeda pada mode Fusion. Untuk informasi selengkapnya, lihat DeleteVectors.

Konsol

Di halaman bucket vektor, klik bucket vektor yang dituju untuk membuka halaman Vector Indexes. Klik nama indeks, pilih vektor yang akan dihapus, lalu konfirmasi penghapusannya.

SDK

Python

# Mengimpor modul yang diperlukan
import argparse
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.vectors as oss_vectors

# Menyiapkan parser argumen baris perintah
parser = argparse.ArgumentParser(description="contoh hapus vektor")
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 akses 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()

    # Memuat 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  # Atur ke False atau hapus baris ini untuk mengakses OSS melalui jaringan publik.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    vector_client = oss_vectors.Client(cfg)

    keys = ['key1', 'key2', 'key3']

    result = vector_client.delete_vectors(oss_vectors.models.DeleteVectorsRequest(
        bucket=args.bucket,
        index_name=args.index_name,
        keys=keys,
    ))

    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
    )

if __name__ == "__main__":
    main()

Go

// Paket utama
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() {
	// Mendefinisikan parameter baris perintah.
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket vektor berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket vektor.")
	flag.StringVar(&accountId, "account-id", "", "ID Akun Alibaba Cloud.")
}

func main() {
	// Mengurai parameter baris perintah.
	flag.Parse()
	
	// Memverifikasi parameter yang diperlukan.
	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")
	}

	// Membuat konfigurasi dan mengatur penyedia kredensial, wilayah, dan ID akun.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region).
		WithAccountId(accountId).
		// Untuk mengaktifkan akses publik, atur ke false atau hapus baris ini.
		WithUseInternalEndpoint(true)

	// Membuat klien Vectors.
	client := vectors.NewVectorsClient(cfg)

	// Membangun permintaan untuk menghapus data vektor.
	request := &vectors.DeleteVectorsRequest{
		Bucket:    oss.Ptr(bucketName),
		IndexName: oss.Ptr("index"),
		Keys: [ ]string{

			"key1", "key2", // Daftar kunci vektor yang akan dihapus.
		},
	}
	
	// Menjalankan operasi untuk menghapus data vektor.
	result, err := client.DeleteVectors(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menghapus vektor %v", err)
	}

	// Mencetak hasil operasi.
	log.Printf("hasil menghapus 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.DeleteVectorsRequest;
import com.aliyun.sdk.service.oss2.vectors.models.DeleteVectorsResult;
import java.util.*;

public class DeleteVectorsSample {
    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()) {
            DeleteVectorsRequest request = DeleteVectorsRequest.newBuilder()
                    .bucket("examplebucket")
                    .indexName("exampleindex")
                    .keys(Arrays.asList("key1", "key2"))
                    .build();
            DeleteVectorsResult result = client.deleteVectors(request);
            System.out.printf("kode status: %d, ID permintaan: %s%n", result.statusCode(), result.requestId());
        }
    }
}

ossutil

Hapus vektor dengan primary key `key` dan `key1` dari indeks bernama `index` di bucket vektor `examplebucket`.

ossutil vectors-api delete-vectors --bucket examplebucket --index-name index --keys key,key1

API

Panggil API DeleteVectors untuk menghapus data vektor.