Pencarian Vektor memungkinkan Anda mencari objek target secara cepat di antara banyak objek berdasarkan kondisi seperti konten semantik, metadata objek, metadata multimedia, ETags objek dan tag, serta metadata kustom. Fitur ini meningkatkan efisiensi pencarian. Topik ini menjelaskan cara melakukan Pencarian Vektor menggunakan Object Storage Service (OSS) SDK untuk Go 2.0.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan Wilayah China (Hangzhou) (
cn-hangzhou) sebagai contoh. Secara default, Titik akhir publik digunakan untuk mengakses sumber daya dalam bucket. Jika Anda mengakses sumber daya dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan bucket, gunakan Titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir OSS.Dalam topik ini, kredensial akses yang diperoleh dari variabel lingkungan digunakan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi Kredensial Akses.
Contoh
Aktifkan fitur AISearch
Berikut adalah kode contoh untuk mengaktifkan Pencarian Vektor pada sebuah bucket:
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
)
// Fungsi init dieksekusi sebelum fungsi utama untuk menginisialisasi program.
func init() {
// Gunakan parameter baris perintah untuk menentukan wilayah.
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Gunakan parameter baris perintah untuk menentukan nama bucket.
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
flag.Parse() // Parsing parameter baris perintah.
// Periksa apakah nama bucket ditentukan. Jika nama bucket tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah ditentukan. Jika wilayah tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Buat dan konfigurasikan klien dan gunakan variabel lingkungan untuk melewati penyedia kredensial.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // Gunakan konfigurasi klien untuk membuat instance OSSClient baru.
// Buat permintaan OpenMetaQuery untuk mengaktifkan Pencarian Vektor untuk bucket tertentu.
request := &oss.OpenMetaQueryRequest{
Bucket: oss.Ptr(bucketName),
Mode: oss.Ptr("semantic"), // Atur Mode ke semantic, yang menentukan bahwa Pencarian Vektor diaktifkan.
}
result, err := client.OpenMetaQuery(context.TODO(), request)
if err != nil {
log.Fatalf("gagal membuka meta query %v", err)
}
log.Printf("hasil pembukaan meta query:%#v\n", result) // Tampilkan hasil permintaan.
}
Kueri pustaka indeks metadata sebuah bucket
Berikut adalah kode contoh untuk mengkueri pustaka indeks metadata sebuah bucket:
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() {
// Gunakan parameter baris perintah untuk menentukan wilayah.
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Gunakan parameter baris perintah untuk menentukan nama bucket.
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
flag.Parse() // Parsing parameter baris perintah.
// Periksa apakah nama bucket ditentukan. Jika nama bucket tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan") // Catat kesalahan dan keluar dari program.
}
// Periksa apakah wilayah ditentukan. Jika wilayah tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan") // Catat kesalahan dan keluar dari program.
}
// Buat dan konfigurasikan klien dan gunakan variabel lingkungan untuk melewati penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // Buat instance OSSClient baru.
// Buat permintaan GetMetaQueryStatus untuk mengkueri pustaka indeks metadata bucket tertentu.
request := &oss.GetMetaQueryStatusRequest{
Bucket: oss.Ptr(bucketName), // Tentukan nama bucket.
}
result, err := client.OpenMetaQuery(context.TODO(), request) // Eksekusi permintaan untuk mengkueri pustaka indeks metadata bucket tertentu.
if err != nil {
log.Fatalf("gagal mendapatkan status meta query %v", err)
}
log.Printf("hasil status meta query:%#v\n", result)
}Kueri objek yang memenuhi kondisi tertentu
Berikut adalah kode contoh untuk menggunakan Pencarian Vektor guna mengkueri objek yang memenuhi kondisi semantik tertentu:
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() {
// Gunakan parameter baris perintah untuk menentukan wilayah. Secara default, parameter tersebut adalah string kosong.
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Gunakan parameter baris perintah untuk menentukan nama bucket. Secara default, parameter tersebut adalah string kosong.
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
flag.Parse() // Parsing parameter baris perintah.
// Periksa apakah nama bucket ditentukan. Jika nama bucket tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah ditentukan. Jika wilayah tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Buat dan konfigurasikan klien dan gunakan variabel lingkungan untuk melewati penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // Gunakan konfigurasi klien untuk membuat instance OSSClient baru.
// Lakukan Pencarian Vektor untuk mengkueri objek yang memenuhi kondisi semantik tertentu.
request := &oss.DoMetaQueryRequest{
Bucket: oss.Ptr(bucketName),
Mode: oss.Ptr("semantic"),
MetaQuery: &oss.MetaQuery{
MaxResults: oss.Ptr(int64(99)),
Query: oss.Ptr("Lihat hutan bersalju"), // Tentukan konten semantik.
MediaType: oss.Ptr("image"), // Tentukan jenis media yang akan dikueri. Dalam contoh ini, jenis medianya diatur ke gambar.
SimpleQuery: oss.Ptr(`{"Operation":"gt", "Field": "Size", "Value": "30"}`),
},
}
result, err := client.DoMetaQuery(context.TODO(), request)
if err != nil {
log.Fatalf("gagal melakukan meta query %v", err)
}
log.Printf("hasil meta query:%#v\n", result)
}
Nonaktifkan AISearch
Berikut adalah kode contoh untuk menonaktifkan Pencarian Vektor pada sebuah bucket:
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() {
// Gunakan parameter baris perintah untuk menentukan wilayah.
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
// Gunakan parameter baris perintah untuk menentukan nama bucket.
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
}
func main() {
flag.Parse() // Parsing parameter baris perintah.
// Periksa apakah nama bucket ditentukan. Jika nama bucket tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan") // Catat kesalahan dan keluar dari program.
}
// Periksa apakah wilayah ditentukan. Jika wilayah tidak ditentukan, kembalikan parameter default dan keluar dari program.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Buat dan konfigurasikan klien dan gunakan variabel lingkungan untuk melewati penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // Buat instance OSSClient baru.
// Buat permintaan CloseMetaQuery untuk menonaktifkan fitur manajemen metadata untuk bucket tertentu.
request := &oss.CloseMetaQueryRequest{
Bucket: oss.Ptr(bucketName), // Tentukan nama bucket.
}
result, err := client.CloseMetaQuery(context.TODO(), request) // Eksekusi permintaan untuk menonaktifkan fitur manajemen metadata untuk bucket.
if err != nil {
log.Fatalf("gagal menutup meta query %v", err)
}
log.Printf("hasil penutupan meta query:%#v\n", result)
}Referensi
Untuk informasi lebih lanjut, lihat AISearch.
Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk mengelola pengindeksan data, lihat Pengindeksan Data.
Untuk kode contoh lengkap yang digunakan untuk mengelola Pencarian Vektor, kunjungi GitHub.