All Products
Search
Document Center

Object Storage Service:Gunakan pencarian vektor untuk menemukan file berdasarkan konten semantik dan fitur multimedia secara cepat

Last Updated:May 10, 2026

Pencarian vektor OSS membantu Anda menemukan file tertentu dalam dataset besar berdasarkan kriteria seperti konten semantik, metadata OSS, metadata multimedia, ETag objek, tag, dan metadata kustom.

Kasus penggunaan

Skenario kantor pribadi dan perusahaan

Pencarian vektor memungkinkan Anda mencari file kantor berdasarkan konten semantiknya. Misalnya, Anda dapat mencari frasa seperti "cara menggunakan sistem ERP", "proses perbaikan IT", atau "analisis kinerja bisnis 2024". Fitur ini menyederhanakan pencarian file dan meningkatkan efisiensi kerja.

Skenario media sosial multimedia

Dalam aplikasi media sosial multimedia, pencarian vektor membantu pengguna menemukan konten dan data multimedia tertentu. Misalnya, pada platform tempat pengguna mengunggah banyak gambar, pencarian semantik memungkinkan mereka menemukan foto berdasarkan isinya, seperti "jalan-jalan musim semi di pinggiran kota", "reuni Tahun Baru Imlek", atau "laut yang pernah saya lihat". Hal ini meningkatkan nilai praktis dan pengalaman pengguna aplikasi Anda.

Skenario cloud drive

Pencarian vektor meningkatkan cloud drive pribadi atau perusahaan dengan memungkinkan pencarian file berdasarkan kontennya, seperti dokumen atau foto tertentu dalam album.

Skenario pengawasan video

Anda dapat menggunakan pencarian vektor untuk menemukan file video tertentu dari data pengawasan video Anda. Misalnya, dengan memasukkan kata kunci seperti "pengawasan luar ruangan saat hari bersalju" atau "kebun buah saat hari cerah", Anda dapat mengambil file yang sesuai.

Batasan

  • Ketersediaan wilayah

    Fitur pencarian vektor tersedia untuk bucket di wilayah Tiongkok (Qingdao), Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Hangzhou), Tiongkok (Shanghai), Tiongkok (Shenzhen), Tiongkok (Guangzhou), Tiongkok (Chengdu), Tiongkok (Hong Kong), Singapura, Indonesia (Jakarta), dan Jerman (Frankfurt).

    Catatan

    Pencarian audio tidak didukung di wilayah Tiongkok (Hong Kong), Singapura, Indonesia (Jakarta), dan Jerman (Frankfurt).

  • Batasan bucket

    Bucket yang telah diaktifkan fitur pencarian vektor dapat berisi maksimal 5 miliar file. Jika jumlah file dalam bucket melebihi batas ini, performa pencarian mungkin menurun. Untuk memproses volume data yang lebih besar, hubungi Technical Support untuk evaluasi.

  • Unggah multi-bagian

    Saat Anda menggunakan unggah multi-bagian, hasil pencarian hanya mencakup objek yang telah sepenuhnya dirakit melalui operasi CompleteMultipartUpload. Hasil tersebut tidak mencakup bagian dari unggahan yang telah dimulai tetapi belum diselesaikan atau dibatalkan.

Referensi performa

Metrik performa berikut untuk OSS vector search disediakan sebagai referensi.

  • Bandwidth internal dan QPS yang disediakan oleh OSS

    OSS menyediakan bandwidth internal dan permintaan per detik (QPS) khusus untuk pencarian vektor. Kapasitas ini, yang menangani hingga 1.250 permintaan file per detik, tidak mengonsumsi kuota quality of service (QoS) bucket Anda.

    Wilayah

    Internal Bandwidth

    Default QPS

    Tiongkok (Beijing), Tiongkok (Hangzhou), Tiongkok (Shanghai), dan Tiongkok (Shenzhen)

    10 Gbps

    1250

    Wilayah lainnya

    1 Gbps

    1250

  • Perkiraan waktu pengindeksan file yang sudah ada

    Pencarian vektor dikenai biaya permintaan API untuk operasi seperti List, Head, dan Get selama pembuatan indeks. Untuk informasi lebih lanjut, lihat Biaya permintaan API. Selain itu, pengindeksan file video, audio, dan dokumen memerlukan waktu lebih lama dibandingkan pengindeksan file gambar. Kami menyarankan Anda memperkirakan jumlah file sebelum mengaktifkan fitur ini.

    • Jika bucket terutama berisi data terstruktur dan file gambar:

      • 10 juta file dalam satu bucket: 2 hingga 3 jam

      • 100 juta file dalam satu bucket: 1 hari

      • 1 miliar file dalam satu bucket: sekitar 10 hari

    • Jika bucket terutama berisi file video, dokumen, dan audio:

      • 10 juta file dalam satu bucket: sekitar 2 hingga 3 hari

      • 100 juta file dalam satu bucket: sekitar 7 hingga 9 hari

  • Perkiraan waktu pembaruan indeks untuk file tambahan

    Saat QPS untuk file baru, dimodifikasi, atau dihapus dalam bucket lebih rendah dari nilai default 1.250, file biasanya dapat dicari dalam hitungan menit hingga jam setelah diunggah atau dimodifikasi. Jika QPS Anda melebihi nilai default, hubungi Technical Support. Kami akan mengevaluasi situasi Anda dan memberikan bantuan.

  • Performa respons pencarian file

    Pencarian mengembalikan hasil dalam hitungan detik. Waktu timeout default adalah 30 detik.

Aktifkan pencarian vektor

Konsol OSS

  1. Masuk ke Konsol OSS.

  2. Klik Buckets, lalu klik nama bucket target.

  3. Di panel navigasi kiri, pilih Files > Data Indexing.

  4. Pada halaman Data Indexing, jika Anda pertama kali menggunakan fitur pengindeksan data, ikuti petunjuk di layar untuk memberikan izin kepada role AliyunMetaQueryDefaultRole. Hal ini memungkinkan OSS mengelola data dalam bucket. Setelah memberikan izin, klik Enable Data Indexing.

  5. Pilih Vector Search dan klik Enable.

    Catatan

    Pembuatan indeks metadata memerlukan waktu. Durasi tergantung pada jumlah objek dalam bucket. Jika proses berlangsung lama, Anda dapat merefresh halaman untuk memeriksa statusnya.

Alibaba Cloud SDK

Java

Hanya Java SDK versi 3.18.2 ke atas yang mendukung pencarian vektor. Untuk informasi lebih lanjut, lihat Pencarian vektor (Java SDK V1).

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.MetaQueryMode;

public class OpenMetaQuery {
    public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException {
        // Titik akhir diatur ke Tiongkok (Hangzhou) dalam contoh ini. Ganti dengan titik akhir aktual.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan nama bucket, misalnya examplebucket.
        String bucketName = "examplebucket";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah Tiongkok (Hangzhou).
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Aktifkan fitur pencarian vektor.
            ossClient.openMetaQuery(bucketName, MetaQueryMode.SEMANTIC);
        } catch (OSSException oe) {
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            // Matikan OSSClient.
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}

Python

Untuk informasi lebih lanjut, lihat Pencarian vektor.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan tambahkan deskripsi.
parser = argparse.ArgumentParser(description="open meta query sample")
# Tambahkan argumen baris perintah wajib --region untuk menentukan wilayah tempat bucket berada.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Tambahkan argumen baris perintah wajib --bucket untuk menentukan nama bucket yang akan dioperasikan.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Tambahkan argumen baris perintah opsional --endpoint untuk menentukan nama domain yang digunakan untuk mengakses OSS.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # Parsing argumen baris perintah.
    args = parser.parse_args()

    # Muat informasi autentikasi dari variabel lingkungan.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Gunakan konfigurasi default yang disediakan oleh SDK.
    cfg = oss.config.load_default()
    # Atur penyedia informasi autentikasi.
    cfg.credentials_provider = credentials_provider
    # Atur wilayah berdasarkan argumen baris perintah.
    cfg.region = args.region
    # Jika endpoint disediakan, perbarui endpoint dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Buat klien OSS.
    client = oss.Client(cfg)

    # Bangun OpenMetaQueryRequest untuk mengaktifkan fitur AISearch pada bucket.
    result = client.open_meta_query(oss.OpenMetaQueryRequest(
            bucket=args.bucket,
            mode='semantic',# Atur ke "semantic" untuk memilih AISearch.
    ))

    # Cetak kode status dan ID permintaan dari permintaan.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

# Panggil fungsi main saat dijalankan sebagai program utama.
if __name__ == "__main__":
    main()

Go

Untuk informasi lebih lanjut, lihat Pencarian vektor (Go SDK V2).

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"
)

var (
	region     string
	bucketName string
)

func init() {
	// Atur flag baris perintah untuk menentukan wilayah.
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// Atur flag baris perintah untuk menentukan nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	// Periksa apakah nama bucket disediakan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Periksa apakah wilayah disediakan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Buat konfigurasi klien dan gunakan kredensial dari variabel lingkungan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS.

	// Buat permintaan untuk mengaktifkan AISearch pada bucket yang ditentukan.
	request := &oss.OpenMetaQueryRequest{
		Bucket: oss.Ptr(bucketName),
		Mode:   oss.Ptr("semantic"), // Atur mode ke "semantic" untuk mengaktifkan kemampuan pencarian semantik.
	}
	result, err := client.OpenMetaQuery(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to open meta query %v", err)
	}

	log.Printf("open meta query result:%#v\n", result)
}

PHP

Untuk informasi lebih lanjut, lihat Pencarian vektor (PHP SDK V2).

<?php

// Sertakan file autoload untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan dan jelaskan parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // (Wajib) Wilayah tempat bucket berada. 
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // (Opsional) Titik akhir yang dapat digunakan layanan lain untuk mengakses OSS. 
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (Wajib) Nama bucket. 
];

// Konversi deskripsi menjadi daftar opsi panjang yang diperlukan oleh getopt.
// Tambahkan tanda titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Parsing parameter baris perintah.
$options = getopt("", $longopts);

// Periksa apakah parameter wajib telah dikonfigurasi.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Dapatkan informasi bantuan untuk parameter.
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // Keluar dari program jika parameter wajib tidak ada.
    }
}

// Tetapkan nilai yang di-parse dari parameter baris perintah ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.

// Muat kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika disediakan.
}

// Buat instance OSSClient.
$client = new Oss\Client($cfg);

// Aktifkan fitur AISearch.
$request = new Oss\Models\OpenMetaQueryRequest($bucket,'semantic');
$result = $client->openMetaQuery($request);

printf(
   'status code:' . $result->statusCode . PHP_EOL .
   'request id:' . $result->requestId
);

ossutil

Perintah berikut memberikan contoh cara mengaktifkan pencarian vektor untuk bucket bernama examplebucket:

ossutil api open-meta-query --bucket examplebucket --meta-query-mode semantic

Untuk informasi lebih lanjut tentang cara menggunakan ossutil untuk melakukan pencarian vektor, lihat open-meta-query.

Lakukan pencarian vektor

Konsol OSS

Bagian ini memberikan contoh cara mencari file yang berisi "bangunan bercahaya", berformat JPG, dan memiliki dimensi dalam rentang 800 × 1.200 piksel. Hasil pencarian yang diharapkan adalah gambar "Night view by the river.jpg" seperti yang ditunjukkan pada gambar berikut.

江边的夜景

  1. Masuk ke Konsol OSS.

  2. Klik Buckets, lalu klik nama bucket target.

  3. Di panel navigasi kiri, pilih Files > Data Indexing.

  4. Atur Search Criteria. Biarkan pengaturan default untuk parameter lainnya.

    • Pada bagian Semantic Content, masukkan deskripsi gambar, misalnya glowing buildings.image

    • Pada Multimedia Type, pilih Image.

      • Atur Image Format ke JPG/JPEG.

      • Atur Image Width kurang dari 800px.

      • Atur Image Height kurang dari 1200px.

      image

  5. Klik Search Now. Hasil pencarian sesuai harapan. File berhasil ditemukan berdasarkan deskripsi fiturnya.

    image

    Untuk informasi tentang semua kriteria pencarian dan pengaturan output, lihat Kriteria pencarian dan pengaturan output.

Alibaba Cloud SDK

Java

Hanya Java SDK versi 3.18.2 ke atas yang mendukung pencarian vektor. Untuk informasi lebih lanjut, lihat Pencarian vektor (Java SDK V1).

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.util.ArrayList;
import java.util.List;

public class DoMetaQuery {
    public static void main(String[] args) throws Exception {
        // Titik akhir diatur ke Tiongkok (Hangzhou) dalam contoh ini. Ganti dengan titik akhir aktual.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan nama bucket, misalnya examplebucket.
        String bucketName = "examplebucket";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah Tiongkok (Hangzhou).
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            int maxResults = 20;
            List<String> mediaTypes = new ArrayList<String>();
            mediaTypes.add("image");
            String query = "Snow";
            String simpleQuery = "{\"Operation\":\"gt\", \"Field\": \"Size\", \"Value\": \"30\"}";
            String sort = "Size";
            DoMetaQueryRequest doMetaQueryRequest = new DoMetaQueryRequest(bucketName, maxResults, query, sort, MetaQueryMode.SEMANTIC, mediaTypes, simpleQuery);
            DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);
        } catch (OSSException oe) {
            System.out.println("Error Message: " + oe.getErrorMessage());
            System.out.println("Error Code:       " + oe.getErrorCode());
            System.out.println("Request ID:      " + oe.getRequestId());
            System.out.println("Host ID:           " + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}

Python

Untuk informasi lebih lanjut, lihat Pencarian vektor.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah untuk memproses input baris perintah.
parser = argparse.ArgumentParser(description="do meta query semantic sample")
# Tambahkan argumen baris perintah yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)  # Wilayah tempat bucket berada.
parser.add_argument('--bucket', help='Nama bucket.', required=True)  # Nama bucket.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')  # Nama domain OSS, opsional.

def main():
    # Uraikan argumen baris perintah.
    args = parser.parse_args()

    # Muat kredensial akses dari variabel lingkungan.
    # Sebelum menjalankan, Anda perlu mengatur variabel lingkungan: OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Muat konfigurasi SDK default.
    cfg = oss.config.load_default()
    # Atur penyedia kredensial.
    cfg.credentials_provider = credentials_provider
    # Atur wilayah.
    cfg.region = args.region
    # Jika endpoint disediakan, perbarui endpoint dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Buat instans klien OSS.
    client = oss.Client(cfg)

    # Mulai permintaan kueri metadata dalam mode AISearch.
    result = client.do_meta_query(oss.DoMetaQueryRequest(
            bucket=args.bucket,
            mode='semantic',
            meta_query=oss.MetaQuery(
                max_results=1000,
                query='Pemandangan udara hutan yang tertutup salju',
                order='desc',
                media_types=oss.MetaQueryMediaTypes(
                    media_type=['image']
                ),
                simple_query='{"Operation":"gt", "Field": "Size", "Value": "30"}',
            ),
    ))

    # Cetak hasil pengambilan.
    print(vars(result))

if __name__ == "__main__":
    main()

Go

Untuk informasi lebih lanjut, lihat Pencarian vektor (Go SDK V2).

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"
)

var (
	region     string
	bucketName string
)

func init() {
	// Atur flag baris perintah untuk menentukan wilayah.
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// Atur flag baris perintah untuk menentukan nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	// Periksa apakah nama bucket disediakan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Periksa apakah wilayah disediakan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Buat konfigurasi klien dan gunakan kredensial dari variabel lingkungan dan wilayah yang ditentukan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS.

	// Lakukan operasi AISearch.
	request := &oss.DoMetaQueryRequest{
		Bucket: oss.Ptr(bucketName),
		Mode:   oss.Ptr("semantic"),
		MetaQuery: &oss.MetaQuery{
			MaxResults: oss.Ptr(int64(99)),
			Query:      oss.Ptr("Overlook the snow-covered forest"), // Berikan string kueri semantik. Ini adalah contoh.
			MediaTypes: &oss.MetaQueryMediaTypes{
				MediaTypes: []string{"image"}, // Tentukan jenis media yang akan dicari. Dalam contoh ini, "image".
			},
			SimpleQuery: oss.Ptr(`{"Operation":"gt", "Field": "Size", "Value": "30"}`),
		},
	}
	result, err := client.DoMetaQuery(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to do meta query %v", err)
	}

	log.Printf("do meta query result:%#v\n", result)
}

PHP

Untuk informasi lebih lanjut, lihat Pencarian vektor (PHP SDK V2).

<?php

// Impor file autoloader untuk memastikan library dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan deskripsi argumen baris perintah.
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // Wilayah tempat bucket berada. Parameter ini wajib.
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // Titik akhir yang dapat digunakan layanan lain untuk mengakses OSS. Parameter ini opsional.
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // Nama bucket. Parameter ini wajib.
];

// Konversi deskripsi argumen ke format opsi panjang yang diperlukan oleh getopt.
// Tanda titik dua (:) setelah setiap argumen menunjukkan bahwa argumen memerlukan nilai.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Parsing argumen baris perintah.
$options = getopt("", $longopts);

// Periksa apakah argumen wajib ditentukan.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Dapatkan informasi bantuan argumen.
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // Jika argumen wajib tidak ditentukan, keluar dari program.
    }
}

// Ekstrak nilai dari argumen yang di-parse.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.

// Muat informasi kredensial dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID Access Key dan Rahasia Access Key dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion($region); // Atur wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Jika titik akhir disediakan, atur titik akhir.
}

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Lakukan kueri AISearch untuk objek yang memenuhi kondisi yang ditentukan.
$request = new Oss\Models\DoMetaQueryRequest($bucket, new Oss\Models\MetaQuery(
    maxResults: 99,
    query: "Overlook the snow-covered forest",
    mediaTypes: new Oss\Models\MetaQueryMediaTypes('image'),
    simpleQuery: '{"Operation":"gt", "Field": "Size", "Value": "30"}',
), 'semantic');

$result = $client->doMetaQuery($request);
printf(
    'status code:' . $result->statusCode . PHP_EOL .
    'request id:' . $result->requestId . PHP_EOL .
    'result:' . var_export($result, true)
);

ossutil

Perintah berikut memberikan contoh cara mengkueri file yang memenuhi kondisi tertentu dalam bucket bernama examplebucket.

ossutil api do-meta-query --bucket examplebucket --meta-query "{\"Query\":\"Overlooking the snow covered forest\",\"MediaTypes\":{\"MediaType\":\"image\"},\"SimpleQuery\":\"{\\\"Operation\\\":\\\"gt\\\", \\\"Field\\\": \\\"Size\\\", \\\"Value\\\": \\\"1\\\"}\"}" --meta-query-mode semantic

Untuk informasi lebih lanjut tentang perintah ini, lihat do-meta-query.

Nonaktifkan pencarian vektor

  • Menonaktifkan fitur ini tidak memengaruhi data yang disimpan di OSS. Jika Anda mengaktifkan kembali fitur ini, sistem akan memindai ulang file yang ada dan membangun kembali indeks. Proses ini memerlukan waktu, tergantung pada jumlah file Anda.

  • Penagihan berhenti pada jam setelah fitur dinonaktifkan. Namun, mungkin terjadi penundaan dalam pembuatan tagihan. Pantau tagihan Anda untuk informasi terbaru.

Konsol OSS

Masuk ke Konsol OSS. Pada halaman Data Indexing, klik Disable di samping Vector Search dan konfirmasi tindakan sesuai petunjuk.

image

Alibaba Cloud SDK

Java

Hanya Java SDK versi 3.18.2 ke atas yang mendukung pencarian vektor. Untuk informasi lebih lanjut, lihat Pencarian vektor (Java SDK V1).

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;

public class CloseMetaQuery {
    public static void main(String[] args) throws Exception {
        // Titik akhir diatur ke Tiongkok (Hangzhou) dalam contoh ini. Ganti dengan titik akhir aktual.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Tentukan nama bucket, misalnya examplebucket.
        String bucketName = "examplebucket";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah Tiongkok (Hangzhou).
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Nonaktifkan fitur pencarian vektor untuk bucket.
            ossClient.closeMetaQuery(bucketName);
        } catch (OSSException oe) {
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message: " + ce.getMessage());
        } finally {
            // Matikan OSSClient.
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}

Python

Untuk informasi lebih lanjut, lihat Pencarian vektor.

import argparse
import alibabacloud_oss_v2 as oss

// Buat parser argumen baris perintah untuk memproses argumen baris perintah.
parser = argparse.ArgumentParser(description="close meta query 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')

def main():
    // Parsing argumen baris perintah.
    args = parser.parse_args()

    // Muat informasi kredensial dari variabel lingkungan.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    // Gunakan konfigurasi default SDK.
    cfg = oss.config.load_default()
    // Atur penyedia kredensial ke kredensial yang diperoleh dari variabel lingkungan.
    cfg.credentials_provider = credentials_provider
    // Atur informasi wilayah dalam konfigurasi.
    cfg.region = args.region
    // Jika titik akhir disediakan, atur titik akhir dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    // Buat klien OSS.
    client = oss.Client(cfg)

    // Panggil metode close_meta_query untuk menonaktifkan fitur pengambilan untuk bucket.
    result = client.close_meta_query(oss.CloseMetaQueryRequest(
            bucket=args.bucket,
    ))

    // Cetak kode status dan ID permintaan dari respons.
    print(f'status code: {result.status_code}, request id: {result.request_id}')

// Jalankan fungsi utama saat skrip ini dijalankan langsung.
if __name__ == "__main__":
    main()

Go

Untuk informasi lebih lanjut, lihat Pencarian vektor (Go SDK V2).

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" 
)

var (
	region     string
	bucketName string
)

func init() {
	// Atur flag baris perintah untuk menentukan wilayah.
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	// Atur flag baris perintah untuk menentukan nama bucket.
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}


func main() {
	flag.Parse()

	// Periksa apakah nama bucket disediakan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Periksa apakah wilayah disediakan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Buat konfigurasi klien dan gunakan kredensial dari variabel lingkungan dan wilayah yang ditentukan.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg) // Buat klien OSS.

	// Buat permintaan untuk menonaktifkan AISearch pada bucket yang ditentukan.
	request := &oss.CloseMetaQueryRequest{
		Bucket: oss.Ptr(bucketName), // Tentukan bucket target.
	}
	result, err := client.CloseMetaQuery(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to close meta query %v", err)
	}

	log.Printf("close meta query result:%#v\n", result)
}

PHP

Untuk informasi lebih lanjut, lihat Pencarian vektor (PHP SDK V2).

<?php

// Impor file autoloader untuk memastikan library dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan deskripsi argumen baris perintah.
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // Wilayah tempat bucket berada. Parameter ini wajib.
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // Titik akhir yang dapat digunakan layanan lain untuk mengakses OSS. Parameter ini opsional.
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // Nama bucket. Parameter ini wajib.
];

// Konversi deskripsi argumen ke format opsi panjang yang diperlukan oleh getopt.
// Tanda titik dua (:) setelah setiap argumen menunjukkan bahwa argumen memerlukan nilai.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Parsing argumen baris perintah.
$options = getopt("", $longopts);

// Periksa apakah argumen wajib ditentukan.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Dapatkan informasi bantuan argumen.
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // Jika argumen wajib tidak ditentukan, keluar dari program.
    }
}

// Ekstrak nilai dari argumen yang di-parse.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.

// Muat informasi kredensial dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID Access Key dan Rahasia Access Key dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion($region); // Atur wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Jika titik akhir disediakan, atur titik akhir.
}

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Buat objek CloseMetaQueryRequest untuk menonaktifkan fitur pengambilan untuk bucket.
$request = new \AlibabaCloud\Oss\V2\Models\CloseMetaQueryRequest(
    bucket: $bucket
);

// Jalankan operasi untuk menonaktifkan fitur pengambilan.
$result = $client->closeMetaQuery($request);

// Cetak hasil menonaktifkan fitur pengambilan.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 200 menunjukkan permintaan berhasil.
    'request id:' . $result->requestId . PHP_EOL     // ID permintaan, digunakan untuk debugging atau pelacakan permintaan.
);

ossutil

Perintah berikut memberikan contoh cara menonaktifkan fitur pencarian vektor untuk bucket bernama examplebucket:

ossutil api close-meta-query --bucket examplebucket

Untuk informasi lebih lanjut tentang perintah ini, lihat close-meta-query.

Kriteria pencarian dan pengaturan output

Kriteria pencarian

Berikut adalah semua kriteria pencarian yang tersedia. Anda dapat mengatur satu atau beberapa kriteria pencarian sesuai kebutuhan.

Kriteria pencarian metadata OSS

Kriteria

Deskripsi

Storage Class

Anda dapat memilih kelas penyimpanan objek yang ingin disertakan dalam hasil kueri.

  • Jika Anda menetapkan konten semantik sebagai kriteria pencarian, hanya kelas penyimpanan Standard dan Infrequent Access (IA) yang didukung.

  • Jika Anda tidak menetapkan konten semantik sebagai kriteria pencarian, kelas penyimpanan Standard, IA, Archive, Cold Archive, dan Deep Cold Archive didukung secara default.

Access Control List (ACL)

Secara default, empat ACL yang didukung oleh OSS dipilih: Inherit from Bucket, Private, Public Read, dan Public Read/Write. Anda dapat memilih ACL objek yang ingin disertakan dalam hasil kueri.

File Name

Fuzzy Match dan Equals didukung. Jika Anda ingin file tertentu, seperti exampleobject.txt, muncul dalam hasil kueri, Anda dapat mencocokkan file dengan salah satu dari dua cara berikut:

  • Pilih Equals dan masukkan nama file lengkap exampleobject.txt.

  • Pilih Fuzzy Match dan masukkan awalan atau akhiran file, seperti example atau .txt.

    Penting

    Pencocokan kabur dapat mencocokkan substring apa pun dari nama objek. Misalnya, jika Anda memasukkan test, hasil kueri mencakup objek seperti localfolder/test/.example.jpg dan localfolder/test.jpg.

Upload Type

Anda dapat mengkueri berdasarkan jenis objek. OSS mendukung jenis berikut, yang semuanya dipilih secara default:

  • Normal: Objek yang dibuat oleh unggahan sederhana.

  • Multipart: Objek yang dibuat oleh unggahan multi-bagian.

  • Appendable: Objek yang dibuat oleh unggahan append.

  • Symbolic link: Tautan simbolik yang menyediakan akses cepat ke objek.

Last Modified Time

Tentukan Start Date dan End Date saat objek terakhir dimodifikasi. Waktu akurat hingga detik.

File Size

Lima kondisi filter didukung: Equals, Greater Than, Greater Than Or Equal To, Less Than, dan Less Than Or Equal To. Ukuran file diukur dalam KB.

Object Version

Anda hanya dapat mengkueri versi terkini objek.

Kriteria pencarian ETag dan tag objek

Untuk memfilter objek berdasarkan ETag dan tag, masukkan informasi ETag atau tag objek yang ingin Anda ambil.

  • ETag hanya mendukung pencocokan eksak. ETag harus diapit tanda kutip. Contoh: "5B3C1A2E0563E1B002CC607C6689". Anda dapat memasukkan beberapa ETag, satu per baris.

  • Tentukan Object Tags sebagai pasangan kunci-nilai. Kunci dan nilai tag objek peka huruf besar/kecil. Untuk informasi lebih lanjut tentang aturan tag, lihat Penandaan objek.

Kriteria pencarian metadata multimedia

Anda dapat memfilter hasil berdasarkan properti spesifik file Image, Document, Audio, dan Video.

Kriteria

Deskripsi

Image

  • Format yang didukung: JPG/JPEG, PNG, APNG, BMP, GIF, WEBP, TIFF, HEIC, HEIC-SEQUENCE, dan AVIF.

  • Lebar dan tinggi gambar: Anda dapat menetapkan rentang lebar dan tinggi dalam piksel (px).

Document

  • Format yang didukung: DOC, DOCX, PPTX, PPT, XLS, XLSX, PDF, RTF, TXT, LOG, XML, dan HTML.

Video

  • Format yang didukung: AVI, MPEG, MPG, RM, MOV, WMV, 3GP, MP4, FLV, MKV, dan TS.

  • Resolusi video: Anda dapat menetapkan rentang resolusi video dalam piksel (px).

  • Durasi video: Anda dapat menetapkan rentang durasi dalam detik (s).

  • Bitrate video: Anda dapat menetapkan rentang bitrate dalam kilobit per detik (kbps).

Audio

  • Format yang didukung: MP3, WMA, OGG, RA, MIDI, AIF/AIFF, M4A, MKA, dan MP2.

  • Durasi audio: Anda dapat menetapkan rentang durasi dalam detik (s).

Kriteria pencarian konten semantik

Anda dapat memasukkan konten semantik untuk mengambil sumber daya gambar, dokumen, video, atau audio terkait secara cepat.

  • Cari file dengan konten tertentu. Kueri pencarian dibatasi hingga 40 karakter. Misalnya, Anda dapat mencari "foto Kota Terlarang saat bersalju" atau "cara menggunakan printer nirkabel".

  • Batasan pencarian konten semantik:

    • Anda tidak dapat menetapkan Object Sorting Method atau metode output Data Aggregation.

    • Anda harus memilih tepat satu set Multimedia Metadata Search Criteria.

    • Pencarian objek yang dienkripsi menggunakan fitur Bawa Kunci Anda Sendiri (BYOK) dari Key Management Service (KMS) tidak didukung.

Kriteria pencarian metadata kustom

Anda dapat memasukkan pasangan kunci-nilai metadata kustom untuk mengambil hasil secara akurat.

  • Tentukan Object Metadata sebagai pasangan kunci-nilai. Untuk informasi lebih lanjut tentang metadata kustom, lihat Kelola metadata objek.

  • Anda dapat menambahkan beberapa pasangan kunci-nilai. Baik kunci maupun nilai wajib diisi. Maksimal 20 pasangan kustom didukung.

Pengaturan output hasil

Saat Anda mencari berdasarkan konten semantik, Anda tidak dapat menentukan metode pengurutan atau menggunakan agregasi data.

Anda dapat mengurutkan hasil output dan melakukan analisis statistik sederhana.

  • Object Sorting Method: Anda dapat mengurutkan hasil berdasarkan waktu modifikasi terakhir, nama file, atau ukuran file secara ascending atau descending. Anda dapat mengurutkan hasil pencarian sesuai kebutuhan untuk menemukan file yang diperlukan secara cepat.

  • Data Aggregation: Anda dapat melakukan perhitungan pada hasil pencarian, seperti menghitung nilai unik, menghitung berdasarkan kelompok, serta menghitung maksimum, minimum, rata-rata, dan jumlah. Hal ini memungkinkan analisis dan manajemen data yang efisien.

Referensi API

Operasi di atas diimplementasikan berdasarkan operasi API. Jika aplikasi Anda memiliki persyaratan khusus, Anda dapat langsung memanggil REST API. Jika Anda langsung memanggil REST API, Anda harus menulis kode secara manual untuk menghitung signature.

Untuk informasi lebih lanjut tentang cara mengaktifkan fitur pencarian vektor, lihat OpenMetaQuery.

Untuk informasi lebih lanjut tentang cara mengkueri file yang memenuhi kondisi tertentu, lihat DoMetaQuery.

Untuk informasi lebih lanjut tentang cara menonaktifkan fitur pencarian vektor, lihat CloseMetaQuery.

Penagihan

  • Biaya pencarian vektor terdiri dari dua bagian utama:

    • Biaya fitur pencarian vektor

      Ini mencakup biaya untuk mengelola metadata objek. Anda dikenai biaya berdasarkan harga pengindeksan data OSS. Untuk informasi lebih lanjut, lihat Biaya pengindeksan data.

    • Biaya permintaan API

      Biaya permintaan API dikenakan selama pembuatan indeks untuk file yang sudah ada dan pembaruan indeks untuk file tambahan. Anda dikenai biaya berdasarkan jumlah panggilan API. Operasi API yang dipanggil meliputi:

      Aksi

      API

      Bangun indeks untuk file dalam bucket.

      HeadObject dan GetObject

      Bucket berisi file yang memiliki tag.

      GetObjectTag

      Bucket berisi file yang memiliki metadata kustom.

      GetObjectMeta

      Bucket berisi file tautan simbolik.

      GetSymlink

      Pindai file dalam bucket.

      ListObjects

      Untuk informasi lebih lanjut tentang biaya permintaan API OSS, lihat Biaya permintaan.

  • Jika Anda ingin berhenti dikenai biaya terkait, nonaktifkan pencarian vektor tepat waktu.

FAQ

Mengapa saya tidak dapat menemukan file segera setelah diunggah?

Pembuatan indeks untuk file yang baru diunggah memerlukan waktu, sehingga terjadi penundaan sebelum file tersebut muncul dalam hasil pencarian. Jika Anda tidak dapat menemukan file segera, tunggu beberapa saat dan coba pencarian Anda lagi.