All Products
Search
Document Center

Object Storage Service:Pengindeksan data (Go SDK V1)

Last Updated:Nov 29, 2025

Fitur pengindeksan data memungkinkan Anda menemukan objek dalam bucket secara cepat. Anda dapat mencari objek yang memenuhi kondisi tertentu, seperti nama objek, ETag, kelas penyimpanan, ukuran, dan waktu modifikasi terakhir. Selain itu, Anda juga dapat menentukan kondisi filter serta mengurutkan atau mengagregasi hasil kueri untuk meningkatkan efisiensi pencarian objek target.

Catatan penggunaan

  • Fitur pengindeksan data didukung di Go SDK V2.2.5 dan versi yang lebih baru.

  • Dalam topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses.

  • Dalam topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Konfigurasikan client (Go SDK V1).

Aktifkan pengindeksan data

Kode berikut mengaktifkan fitur manajemen metadata untuk bucket tertentu. Setelah diaktifkan, OSS membuat pustaka indeks metadata untuk bucket tersebut dan membangun indeks metadata untuk semua objek di dalamnya. Setelah pustaka indeks metadata dibuat, OSS melakukan pemindaian inkremental hampir real-time terhadap file baru di bucket dan membangun indeks metadata untuk file tersebut.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, sesuaikan wilayahnya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Aktifkan fitur manajemen metadata.
	err = client.OpenMetaQuery("examplebucket")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println("Open data query success")
}

Dapatkan status pengindeksan data

Kode berikut menunjukkan cara mengambil status pengindeksan data untuk bucket tertentu.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, sesuaikan wilayahnya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Dapatkan informasi tentang pustaka indeks metadata.
	result, err := client.GetMetaQueryStatus("examplebucket")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	fmt.Printf("State:%s\n", result.State)
	fmt.Printf("Phase:%s\n", result.Phase)
	fmt.Printf("CreateTime:%s\n", result.CreateTime)
	fmt.Printf("UpdateTime:%s\n", result.UpdateTime)
}

Kueri objek yang memenuhi kondisi tertentu

Kode berikut menunjukkan cara melakukan kueri objek yang memenuhi kondisi tertentu dan menampilkan informasi objek berdasarkan bidang dan urutan pengurutan yang ditentukan.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, sesuaikan wilayahnya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Kueri file yang lebih besar dari 30 byte, kembalikan maksimal 10 hasil, dan urutkan hasil secara ascending.
	query := oss.MetaQuery{
		NextToken:  "",
		MaxResults: 10,
		Query:      `{"Field": "Size","Value": "30","Operation": "gt"}`,
		Sort:       "Size",
		Order:      "asc",
	}
	// Kueri objek yang memenuhi kondisi yang ditentukan dan tampilkan informasi objek berdasarkan bidang dan metode pengurutan yang ditentukan.
	result, err := client.DoMetaQuery("examplebucket", query)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Printf("NextToken:%s\n", result.NextToken)
	for _, file := range result.Files {
		fmt.Printf("File name: %s\n", file.Filename)
		fmt.Printf("size: %d\n", file.Size)
		fmt.Printf("File Modified Time:%s\n", file.FileModifiedTime)
		fmt.Printf("Oss Object Type:%s\n", file.OssObjectType)
		fmt.Printf("Oss Storage Class:%s\n", file.OssStorageClass)
		fmt.Printf("Object ACL:%s\n", file.ObjectACL)
		fmt.Printf("ETag:%s\n", file.ETag)
		fmt.Printf("Oss CRC64:%s\n", file.OssCRC64)
		fmt.Printf("Oss Tagging Count:%d\n", file.OssTaggingCount)
		for _, tagging := range file.OssTagging {
			fmt.Printf("Oss Tagging Key:%s\n", tagging.Key)
			fmt.Printf("Oss Tagging Value:%s\n", tagging.Value)
		}
		for _, userMeta := range file.OssUserMeta {
			fmt.Printf("Oss User Meta Key:%s\n", userMeta.Key)
			fmt.Printf("Oss User Meta Key Value:%s\n", userMeta.Value)
		}
	}
}

Nonaktifkan Fitur Manajemen Metadata

Kode berikut menonaktifkan fitur manajemen metadata untuk bucket tertentu.

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	/// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instans OSSClient.
	// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan Endpoint-nya.
	// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, sesuaikan wilayahnya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Setel versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Nonaktifkan fitur manajemen metadata.
	err = client.CloseMetaQuery("examplebucket")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println("Closed data query success")
}

Referensi

  • Untuk informasi selengkapnya mengenai operasi API untuk mengaktifkan pengindeksan data, lihat OpenMetaQuery.

  • Untuk informasi selengkapnya mengenai operasi API untuk mengambil status pengindeksan data, lihat GetMetaQueryStatus.

  • Untuk informasi selengkapnya mengenai operasi API untuk melakukan kueri objek yang memenuhi kondisi tertentu dan menampilkan informasi objek berdasarkan bidang dan urutan pengurutan yang ditentukan, lihat DoMetaQuery.

  • Untuk informasi selengkapnya mengenai operasi API untuk menonaktifkan pengindeksan data, lihat CloseMetaQuery.