All Products
Search
Document Center

Intelligent Media Management:SimpleQuery

Last Updated:Oct 09, 2026

Mengkueri dan mengagregasi file dalam set data, serta mendukung ekspresi logis.

Deskripsi operasi

  • Sebelum memanggil operasi ini, pastikan Anda sepenuhnya memahami metode penagihan dan harga Intelligent Media Management.

  • Sebelum memanggil operasi ini, pastikan Anda telah mengindeks file ke dalam set data dengan menggunakan binding (CreateBinding) atau pengindeksan aktif (IndexFileMeta atau BatchIndexFileMeta).

  • Hasil yang dikembalikan hanya berupa contoh. Bergantung pada konfigurasi templat alur kerja, kategori dan konten metadata file yang diperoleh dapat berbeda dari contoh. Jika Anda memiliki pertanyaan, bergabunglah dengan kelompok DingTalk untuk memberikan masukan. Untuk ID kelompok DingTalk, lihat Hubungi kami.

Batasan

  • Setiap kueri mengembalikan maksimum 100 file.

  • Setiap kueri mengembalikan maksimum 2.000 informasi statistik agregasi.

  • Mendukung maksimum 100 kondisi subkueri.

  • Mendukung kedalaman bersarang maksimum 5 level untuk subkueri.

Contoh kondisi kueri

  • Untuk mencari gambar JPEG dengan ukuran lebih dari 1.000 piksel, tentukan parameter Query sebagai berikut:

{
  "SubQueries":[
    {
      "Field":"ContentType",
      "Value": "image/jpeg",
      "Operation":"eq"
    },         
    {
      "Field":"ImageWidth",
      "Value":"1000",
      "Operation":"gt"
    }
  ],
  "Operation":"and"
}
  • Untuk mencari semua file di oss://examplebucket/path/ yang mengandung tag TV atau Speaker dan berukuran lebih dari 10 MB, tentukan parameter Query sebagai berikut:

Catatan

Di sini, TV dan Speaker adalah tag yang berbeda dari file yang sama dan ada sebagai dua objek independen di bidang Labels. Perhatikan perbedaan antara ini dan contoh berikutnya.

{
  "SubQueries": [
    {
      "Field": "URI",
      "Value": "oss://examplebucket/path/",
      "Operation": "awalan"
    },
    {
      "Field": "Size",
      "Value": "1048576",
      "Operation": "gt"
    },
    {
      "SubQueries": [
        {
          "Field": "Labels.LabelName",
          "Value": "TV",
          "Operation": "eq"
        },
        {
          "Field": "Labels.LabelName",
          "Value": "Speaker",
          "Operation": "eq"
        }
      ],
      "Operation": "or"
    }
  ],
  "Operation": "and"
}
        
  • Untuk mengecualikan file yang berisi informasi wajah pria berusia lebih dari 36 tahun, tentukan parameter Query sebagai berikut:

Catatan

Tidak seperti contoh sebelumnya, ini memerlukan satu wajah untuk memenuhi kedua kondisi: berusia lebih dari 36 tahun dan pria. Ini berbeda dari persyaratan di mana sebuah gambar berisi beberapa wajah, salah satunya pria dan yang lainnya berusia lebih dari 36 tahun. Dalam permintaan ini, Anda harus menggunakan kueri bersarang untuk memastikan bahwa kondisi terpenuhi dalam elemen yang sama.

{
	"Operation": "not",
	"SubQueries": [{
		"Operation": "nested",
		"SubQueries": [{
			"Operation": "and",
			"SubQueries": [{
				"Field": "Figures.Age",
				"Operation": "gt",
				"Value": "36"
			}, {
				"Field": "Figures.Gender",
				"Operation": "eq",
				"Value": "male"
			}]
		}]
	}]
}
  • Untuk mencari gambar JPEG yang memiliki tag kustom dan tag sistem, tentukan parameter Query sebagai berikut:

{
  "SubQueries":[
    {
      "Field":"ContentType",
      "Value": "image/jpeg",
      "Operation":"eq"
    },         
    {
      "Field":"CustomLabels.test",
      "Operation":"exist"
    },         
    {
      "Field":"Labels.LabelName",
      "Operation":"exist"
    }
  ],
  "Operation":"and"
}

Berdasarkan kondisi pencarian sebelumnya, Anda juga dapat menggunakan operasi agregasi untuk mengumpulkan statistik dan menganalisis data yang berbeda. Misalnya, Anda dapat menghitung ukuran total, jumlah, rata-rata, atau nilai ekstrem dari semua file yang memenuhi kondisi pencarian, atau mengumpulkan statistik tentang distribusi ukuran semua gambar yang memenuhi kondisi pencarian.

Coba sekarang

Coba API ini di OpenAPI Explorer tanpa perlu penandatanganan manual. Panggilan yang berhasil akan secara otomatis menghasilkan contoh kode SDK sesuai dengan parameter Anda. Unduh kode tersebut dengan kredensial bawaan yang aman untuk penggunaan lokal.

Test

RAM authorization

Tabel berikut menjelaskan otorisasi yang diperlukan untuk memanggil API ini. Anda dapat menentukannya dalam kebijakan Resource Access Management (RAM). Kolom pada tabel dijelaskan sebagai berikut:

  • Action: Aksi yang dapat digunakan dalam elemen Action pada pernyataan kebijakan izin RAM untuk memberikan izin guna melakukan operasi tersebut.

  • API: API yang dapat Anda panggil untuk melakukan aksi tersebut.

  • Access level: Tingkat akses yang telah ditentukan untuk setiap API. Nilai yang valid: create, list, get, update, dan delete.

  • Resource type: Jenis resource yang mendukung otorisasi untuk melakukan aksi tersebut. Ini menunjukkan apakah aksi tersebut mendukung izin tingkat resource. Resource yang ditentukan harus kompatibel dengan aksi tersebut. Jika tidak, kebijakan tersebut tidak akan berlaku.

    • Untuk API dengan izin tingkat resource, jenis resource yang diperlukan ditandai dengan tanda bintang (*). Tentukan Nama Sumber Daya Alibaba Cloud (ARN) yang sesuai dalam elemen Resource pada kebijakan.

    • Untuk API tanpa izin tingkat resource, ditampilkan sebagai All Resources. Gunakan tanda bintang (*) dalam elemen Resource pada kebijakan.

  • Condition key: Kunci kondisi yang didefinisikan oleh layanan. Kunci ini memungkinkan kontrol granular, berlaku baik hanya untuk aksi maupun untuk aksi yang terkait dengan resource tertentu. Selain kunci kondisi spesifik layanan, Alibaba Cloud menyediakan serangkaian common condition keys yang berlaku di semua layanan yang didukung RAM.

  • Dependent action: Aksi dependen yang diperlukan untuk menjalankan aksi tersebut. Untuk menyelesaikan aksi tersebut, pengguna RAM atau role RAM harus memiliki izin untuk melakukan semua aksi dependen.

Action

Access level

Resource type

Condition key

Dependent action

imm:SimpleQuery

list

*Set Data.

acs:imm:{#regionId}:{#accountId}:project/{#ProjectName}/dataset/{#DatasetName}

None None

Parameter permintaan

Parameter

Type

Required

Description

Example

NextToken

string

No

Token yang digunakan untuk paginasi ketika jumlah total file melebihi nilai MaxResults.

Daftar file dikembalikan dalam Pesanan leksikografis mulai dari NextToken.

Atur parameter ini menjadi kosong saat Anda memanggil operasi ini untuk pertama pengatur waktu.

MTIzNDU2Nzg6aW1tdGVzdDpleGFtcGxlYnVja2V0OmRhdGFzZXQwMDE6b3NzOi8vZXhhbXBsZWJ1Y2tldC9zYW1wbGVvYmplY3QxLmpwZw==

MaxResults

integer

No

  • Saat Anda melakukan kueri untuk file tanpa menentukan parameter Aggregations, parameter ini menentukan jumlah maksimum file yang akan dikembalikan. Nilai valid: 0 hingga 100.

  • Saat Anda menentukan parameter Aggregations untuk statistik agregasi, parameter ini menentukan jumlah maksimum kelompok yang akan dikembalikan. Nilai valid: 0 hingga 2000.

  • Jika Anda tidak menentukan parameter ini atau mengaturnya ke 0, nilai default adalah 100.

10

ProjectName

string

Yes

Nama proyek. Untuk informasi selengkapnya tentang cara mendapatkan nama proyek, lihat Membuat proyek.

test-project

DatasetName

string

Yes

Nama set data. Untuk informasi selengkapnya tentang cara mendapatkan nama set data, lihat Membuat set data.

test-dataset

Query SimpleQuery

No

Kondisi kueri sederhana. Klik tautan di sebelah kiri untuk Tampilan detail.

Sort

string

No

Daftar bidang pengurutan. Untuk informasi selengkapnya, lihat Bidang dan operator yang didukung.

Catatan
  • Anda dapat memisahkan beberapa bidang pengurutan dengan koma (,), misalnya, Size,Filename.

  • Anda dapat menentukan maksimal 5 bidang pengurutan.

  • Pesanan bidang pengurutan menentukan prioritas pengurutan.

Size,Filename

Order

string

No

Pesanan pengurutan untuk bidang pengurutan. Nilai valid:

  • asc: Pesanan menaik

  • desc: Pesanan menurun (default)

Catatan
  • Anda dapat memisahkan beberapa Pesanan pengurutan dengan koma (,), misalnya, asc,desc.

  • Jumlah Pesanan pengurutan tidak boleh melebihi jumlah bidang pengurutan. Artinya, jumlah elemen dalam parameter Order harus kurang dari atau sama dengan jumlah elemen dalam parameter Sort. Misalnya, jika Sort diatur ke Size,Filename, Order dapat diatur ke "asc,desc".

  • Jika jumlah Pesanan pengurutan kurang dari jumlah bidang pengurutan, Pesanan pengurutan default untuk bidang yang tidak ditentukan adalah desc. Misalnya, jika Sort diatur ke Size,Filename dan Order diatur ke asc, Pesanan pengurutan default untuk Filename adalah desc, yang berarti Pesanan menurun.

asc,desc

Aggregations

array<object>

No

Daftar informasi bidang agregasi.

Penting Saat Anda menggunakan kueri agregasi, hanya hasil agregasi yang dikembalikan, dan daftar metadata yang cocok tidak dikembalikan.

object

No

Struktur informasi bidang agregasi.

Field

string

No

Nama bidang. Untuk informasi selengkapnya tentang bidang yang didukung, lihat Bidang dan operator yang didukung.

Size

Operation

string

No

Operator untuk bidang agregasi.

Valid values:

  • average :

    Rata-rata.

  • min :

    Nilai minimum.

  • max :

    Nilai maksimum.

  • count :

    Jumlah.

  • distinct :

    Jumlah unik.

  • sum :

    Total.

  • group :

    Jumlah kelompok, diPesanan secara menurun berdasarkan hasil jumlah kelompok.

sum

WithFields

array

No

Menentukan bidang spesifik yang akan dikembalikan alih-alih semua bidang metadata yang ada. Ini dapat digunakan untuk mengurangi ukuran struktur yang dikembalikan.

Jika Anda tidak menentukan parameter ini atau membiarkannya kosong, semua bidang akan dikembalikan.

string

No

Nama bidang yang akan dikembalikan. Untuk informasi selengkapnya tentang nama bidang yang didukung, lihat File.

Filename

WithoutTotalHits

boolean

No

Apakah akan mengembalikan jumlah total rekaman yang cocok. Nilai valid:

  • true: Bidang TotalHits tidak dikembalikan.

  • false: Bidang TotalHits dikembalikan.

Elemen respons

Element

Type

Description

Example

object

Struktur tanggapan.

Aggregations

array<object>

Daftar informasi bidang agregasi. Parameter ini hanya dikembalikan ketika Aggregations dalam permintaan tidak kosong.

array<object>

Struktur informasi bidang agregasi.

Field

string

Nama bidang agregasi.

Size

Groups

array<object>

Daftar hasil pengelompokan dan agregasi. Parameter ini hanya dikembalikan ketika Operation dengan tipe kelompok ada di Aggregations pada permintaan.

object

Hasil kelompok dan agregasi.

Count

integer

Jumlah total dari kelompok dan agregasi.

5

Value

string

Nilai dari kelompok dan agregasi.

100

Operation

string

Operasi agregasi untuk bidang agregasi.

sum

Value

number

Hasil statistik agregasi.

200

Files

array

Daftar informasi file. Parameter ini hanya dikembalikan ketika Aggregations dalam permintaan kosong.

File

Struktur informasi file.

NextToken

string

Token yang digunakan untuk paginasi ketika jumlah total file melebihi nilai MaxResults.

Saat Anda menampilkan daftar informasi file pengatur waktu berikutnya, atur NextToken ke nilai ini untuk mengembalikan hasil yang tersisa.

Parameter ini hanya memiliki nilai ketika tidak semua file dikembalikan.

MTIzNDU2Nzg6aW1tdGVzdDpleGFtcGxlYnVja2V0OmRhdGFzZXQwMDE6b3NzOi8vZXhhbXBsZWJ1Y2tldC9zYW1wbGVvYmplY3QxLmpwZw==

RequestId

string

ID permintaan.

2C5C1E0F-D8B8-4DA0-8127-EC32C771****

TotalHits

integer

Jumlah rekaman yang cocok.

10

Contoh

Respons sukses

JSONformat

{
  "Aggregations": [
    {
      "Field": "Size",
      "Groups": [
        {
          "Count": 5,
          "Value": "100"
        }
      ],
      "Operation": "sum",
      "Value": 200
    }
  ],
  "Files": [
    {
      "OwnerId": "102321002467****",
      "ProjectName": "test-project",
      "DatasetName": "test-dataset",
      "ObjectType": "file",
      "ObjectId": "75d5de2c50754e3dadd5c35dbca5f9949369e37eb342a73821f690c94c36c7f7",
      "UpdateTime": "2021-06-29T14:50:13.011643661+08:00",
      "CreateTime": "2021-06-29T14:50:13.011643661+08:00",
      "URI": "oss://test-bucket/test-object.jpg",
      "OSSURI": "oss://examplebucket/sampleobject.jpg",
      "Filename": "sampleobject.jpg",
      "MediaType": "image",
      "ContentType": "image/jpeg",
      "Size": 1000,
      "FileHash": "1d9c280a7c4f67f7ef873e28449dbe17",
      "FileModifiedTime": "2021-06-29T14:50:13.011643661+08:00",
      "FileCreateTime": "2021-06-29T14:50:13.011643661+08:00",
      "FileAccessTime": "2021-06-29T14:50:13.011643661+08:00",
      "ProduceTime": "2021-06-29T14:50:13.011643661+08:00",
      "LatLong": "30.134390,120.074997",
      "Timezone": "\"\"",
      "Addresses": [
        {
          "Language": "zh-Hans",
          "AddressLine": "中国浙江省杭州市余杭区文一西路969号",
          "Country": "中国",
          "Province": "浙江省",
          "City": "杭州市",
          "District": "余杭区",
          "Township": "文一西路"
        }
      ],
      "TravelClusterId": "-",
      "Orientation": 0,
      "Figures": [
        {
          "FigureId": "868a9e74-cde5-4c7a-9013-28bb984****",
          "FigureConfidence": 1,
          "FigureClusterId": "Cluster-dbe72fec-b84c-4ab6-885b-3678e64****",
          "FigureClusterConfidence": 1,
          "FigureType": "face",
          "Age": 29,
          "AgeSD": 5,
          "Gender": "female",
          "GenderConfidence": 1,
          "Emotion": "happiness",
          "EmotionConfidence": 0.70784568786621,
          "FaceQuality": 0.960875928401947,
          "Boundary": {
            "Width": 200,
            "Height": 300,
            "Left": 10,
            "Top": 30,
            "Polygon": [
              {
                "X": 10,
                "Y": 10
              }
            ]
          },
          "Mouth": "close",
          "MouthConfidence": 1,
          "Beard": "none",
          "BeardConfidence": 1,
          "Hat": "none",
          "HatConfidence": 1,
          "Mask": "none",
          "MaskConfidence": 1,
          "Glasses": "none",
          "GlassesConfidence": 0.8,
          "Sharpness": 0.7,
          "Attractive": 0.96,
          "HeadPose": {
            "Pitch": 18.385589599609375,
            "Roll": 4.204030513763428,
            "Yaw": 2.4945924282073975
          }
        }
      ],
      "FigureCount": 10,
      "Labels": [
        {
          "Language": "zh-Hans",
          "LabelName": "椅子",
          "LabelLevel": 2,
          "LabelConfidence": 0.95,
          "ParentLabelName": "家具",
          "CentricScore": 0.877,
          "LabelAlias": "座椅",
          "Clips": [
            {
              "TimeRange": [
                100
              ]
            }
          ]
        }
      ],
      "Title": "test",
      "ImageWidth": 270,
      "ImageHeight": 500,
      "EXIF": "{\"Compression\":{\"value\":\"6\"},\"DateTime\":{\"value\":\"2020:08:19 17:11:11\"}}",
      "ImageScore": {
        "OverallQualityScore": 0.736
      },
      "CroppingSuggestions": [
        {
          "AspectRatio": "2:3",
          "Confidence": 0.742,
          "Boundary": {
            "Width": 200,
            "Height": 300,
            "Left": 10,
            "Top": 30,
            "Polygon": [
              {
                "X": 10,
                "Y": 10
              }
            ]
          }
        }
      ],
      "OCRContents": [
        {
          "Language": "zh-hans",
          "Contents": "欢迎使用智能媒体管理",
          "Confidence": 0.8254936695098877,
          "Boundary": {
            "Width": 200,
            "Height": 300,
            "Left": 10,
            "Top": 30,
            "Polygon": [
              {
                "X": 10,
                "Y": 10
              }
            ]
          }
        }
      ],
      "VideoWidth": 1080,
      "VideoHeight": 1920,
      "VideoStreams": [
        {
          "Index": 0,
          "Language": "en",
          "CodecName": "h264",
          "CodecLongName": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
          "Profile": "High",
          "CodecTimeBase": "1373627/83160000",
          "CodecTagString": "avc1",
          "CodecTag": "0x31637661",
          "Width": 1280,
          "Height": 720,
          "HasBFrames": 2,
          "SampleAspectRatio": "1:1",
          "DisplayAspectRatio": "16:9",
          "PixelFormat": "yuv420p",
          "Level": 40,
          "FrameRate": "25/1",
          "AverageFrameRate": "25/1",
          "TimeBase": "1/12800",
          "StartTime": 0,
          "Duration": 22.88,
          "Bitrate": 5407765,
          "FrameCount": 572,
          "Rotate": "90",
          "BitDepth": 8,
          "ColorSpace": "bt709",
          "ColorRange": "tv",
          "ColorTransfer": "bt709",
          "ColorPrimaries": "bt709"
        }
      ],
      "Subtitles": [
        {
          "Index": 2,
          "Language": "en",
          "CodecName": "mov_text",
          "CodecLongName": "MOV text",
          "CodecTagString": "tx3g",
          "CodecTag": "0x67337874",
          "StartTime": 0,
          "Duration": 71.378,
          "Bitrate": 74,
          "Content": "欢迎",
          "Width": 600,
          "Height": 30
        }
      ],
      "AudioStreams": [
        {
          "Index": 1,
          "Language": "en",
          "CodecName": "aac",
          "CodecLongName": "AAC (Advanced Audio Coding)",
          "CodecTimeBase": "1/44100",
          "CodecTagString": "mp4a",
          "CodecTag": "0x6134706d",
          "TimeBase": "1/48000",
          "StartTime": 0.0235,
          "Duration": 3.690667,
          "Bitrate": 320087,
          "FrameCount": 173,
          "Lyric": "test",
          "SampleFormat": "fltp",
          "SampleRate": 48000,
          "Channels": 2,
          "ChannelLayout": "stereo"
        }
      ],
      "Artist": "Jane",
      "AlbumArtist": "Jane",
      "AudioCovers": [
        {
          "ImageWidth": 500,
          "ImageHeight": 820,
          "EXIF": "{\"FileSize\":{\"value\":\"29304\"},\"Format\":{\"value\":\"jpg\"}}",
          "ImageScore": {
            "OverallQualityScore": 0.736
          },
          "CroppingSuggestions": [
            {
              "AspectRatio": "2:3",
              "Confidence": 0.742
            }
          ],
          "OCRContents": [
            {
              "Language": "zh-hans",
              "Contents": "欢迎使用智能媒体管理",
              "Confidence": 0.8254936695098877
            }
          ]
        }
      ],
      "Composer": "Jane",
      "Performer": "Jane",
      "Language": "eng",
      "Album": "FirstAlbum",
      "PageCount": 5,
      "ETag": "\"1D9C280A7C4F67F7EF873E28449****\"",
      "CacheControl": "no-cache",
      "ContentDisposition": "attachment; filename =test.jpg",
      "ContentEncoding": "UTF-8",
      "ContentLanguage": "zh-CN",
      "AccessControlAllowOrigin": "https://aliyundoc.com",
      "AccessControlRequestMethod": "PUT",
      "ServerSideEncryptionCustomerAlgorithm": "SM4",
      "ServerSideEncryption": "AES256",
      "ServerSideDataEncryption": "SM4",
      "ServerSideEncryptionKeyId": "9468da86-3509-4f8d-a61e-6eab1eac****",
      "OSSStorageClass": "Standard",
      "OSSCRC64": "559890638950338001",
      "ObjectACL": "default",
      "ContentMd5": "HZwoCnxPZ/fvhz4oRJ2+Fw==",
      "OSSUserMeta": {
        "key": "val"
      },
      "OSSTaggingCount": 2,
      "OSSTagging": {
        "key": "val"
      },
      "OSSExpiration": "2120-01-01T12:00:00.000Z",
      "OSSVersionId": "CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0****",
      "OSSDeleteMarker": "CAEQMhiBgIDXiaaB0BYiIGQzYmRkZGUxMTM1ZDRjOTZhNjk4YjRjMTAyZjhl****",
      "OSSObjectType": "Normal",
      "CustomId": "\t\nmember-image-id-0001",
      "CustomLabels": {
        "MemberName": "Tim",
        "Enabled": "True",
        "ItemCount": "10"
      },
      "StreamCount": 1,
      "ProgramCount": 1,
      "FormatName": "mov",
      "FormatLongName": "QuickTime / MOV",
      "StartTime": 0,
      "Bitrate": 13091201,
      "Duration": 15.263,
      "SemanticTypes": [
        "content"
      ],
      "Elements": [
        {
          "ElementContents": [
            {
              "Type": "text",
              "Content": "文本片段",
              "URL": "http://aliyun.com",
              "TimeRange": [
                500
              ]
            }
          ],
          "ObjectId": "id1",
          "ElementType": "title - 标题; image - 图片 ; table - 表格 ; narrative-text - 正文",
          "SemanticSimilarity": 0.8,
          "ElementRelations": [
            {
              "Type": "child,parent",
              "ObjectId": "id1"
            }
          ]
        }
      ],
      "SceneElements": [
        {
          "TimeRange": [
            100
          ],
          "FrameTimes": [
            30
          ],
          "VideoStreamIndex": 0,
          "Labels": [
            {
              "Language": "zh-Hans",
              "LabelName": "椅子",
              "LabelLevel": 2,
              "LabelConfidence": 0.95,
              "ParentLabelName": "家具",
              "CentricScore": 0.877,
              "LabelAlias": "座椅",
              "Clips": [
                {
                  "TimeRange": [
                    100
                  ]
                }
              ]
            }
          ]
        }
      ],
      "OCRTexts": "阿里云IMM",
      "Reason": "[InternalError] The request has been failed due to some unknown error. status: 500, requestId: CC5ACFBD-BB7A-496D-A9D6-****",
      "ObjectStatus": "Indexed",
      "Insights": {
        "Video": {
          "Description": "无。",
          "Caption": "视频中展示了两个不同场景:一个是静止的白色盘子、黑色瓶子和透明玻璃杯,另一个是手拿着标有“YEZOLU”的洗发水瓶在浴室中缓慢上移。"
        },
        "Image": {
          "Caption": "无。",
          "Description": "图片中有一人,穿着深色西装外套,内搭白色衬衫。背景为渐变的浅蓝色至灰色。"
        }
      }
    }
  ],
  "NextToken": "MTIzNDU2Nzg6aW1tdGVzdDpleGFtcGxlYnVja2V0OmRhdGFzZXQwMDE6b3NzOi8vZXhhbXBsZWJ1Y2tldC9zYW1wbGVvYmplY3QxLmpwZw==",
  "RequestId": "2C5C1E0F-D8B8-4DA0-8127-EC32C771****",
  "TotalHits": 10
}

Kode kesalahan

Lihat Error Codes untuk daftar lengkap.

Catatan rilis

Lihat Release Notes untuk daftar lengkap.