Batasan StructArray
Dukungan StructArray mencakup definisi skema, muatan penyisipan, pengindeksan, mode pencarian, dan filter khusus StructArray. Gunakan halaman ini sebagai referensi batasan sebelum Anda mengandalkan perilaku StructArray dalam lingkungan produksi.
Sebagian besar batasan StructArray berasal dari salah satu dari tiga sumber: model skema StructArray, mode pencarian yang Anda pilih untuk subbidang vektor, dan versi Milvus yang digunakan oleh koleksi Anda.
Sekilas tentang batasan
| Area | Batasan |
|---|---|
| Bentuk skema | Struct hanya dapat digunakan sebagai tipe elemen dari bidang Array. Struct tidak didukung sebagai bidang koleksi tingkat atas. |
| Skema subbidang | Semua elemen Struct dalam bidang StructArray yang sama berbagi satu skema Struct yang telah ditentukan sebelumnya. |
| Kapasitas | max_capacity diperlukan dan membatasi jumlah elemen Struct yang dapat disimpan oleh satu entitas dalam bidang StructArray. |
| Perubahan subbidang | Setelah bidang StructArray dibuat, Anda tidak dapat menambahkan subbidang ke bidang StructArray yang sudah ada tersebut. |
| Jalur subbidang | Gunakan jalur structArray[subfield], seperti chunks[emb], untuk indeks, target pencarian, bidang keluaran, dan filter. Jangan gunakan chunks.emb. |
| Bentuk penyisipan | Sisipkan bidang StructArray sebagai array objek. Jangan gunakan sintaks jalur di dalam muatan penyisipan. |
| Indeks vektor | Bidang vektor atau subbidang vektor hanya menerima satu indeks. Gunakan subbidang vektor terpisah untuk pencarian EmbeddingList dan pencarian tingkat elemen. |
| Fungsi | Fungsi bidang tidak didukung untuk bidang atau subbidang di dalam bidang StructArray. |
| Bidang yang dapat bernilai null | Bidang StructArray yang dapat bernilai null bergantung pada versi. Jika didukung, nilai null berlaku untuk seluruh bidang StructArray, bukan untuk setiap elemen Struct secara terpisah. |
| Menambahkan bidang secara dinamis | Penambahan bidang StructArray ke koleksi yang sudah ada bergantung pada versi dan mengharuskan bidang yang ditambahkan bersifat nullable. |
Batasan skema
| Batas | Rincian |
|---|---|
| Struct bukanlah tipe bidang tingkat atas. | Buat bidang StructArray sebagai ` datatype=DataType.ARRAY ` dengan ` element_type=DataType.STRUCT ` dan ` struct_schema`. |
| Semua elemen berbagi satu skema. | Setiap elemen Struct dalam bidang StructArray mengikuti daftar subbidang dan tipe data subbidang yang sama. |
max_capacity diperlukan. | Jumlah elemen Struct dalam satu entitas tidak boleh melebihi batas maksimum ( max_capacity ) yang dikonfigurasi untuk bidang StructArray. |
| Subfield yang ada bersifat tetap. | Anda tidak dapat menambahkan subfield baru ke bidang StructArray yang sudah ada. Untuk mengubah skema subfield, hapus bidang StructArray tersebut dan tambahkan kembali dengan skema yang telah diperbarui. |
| StructArray bersarang tidak didukung. | Bidang StructArray tidak boleh berisi subbidang Array, ArrayOfVector, Struct, atau ArrayOfStruct yang bersarang. |
| Fungsi tidak didukung di dalam StructArray. | Jangan mendefinisikan fungsi bidang untuk bidang StructArray atau subbidangnya. |
Untuk contoh pembuatan skema, lihat Membuat Bidang StructArray.
Tipe data subbidang yang didukung
Subbidang StructArray dipetakan ke penyimpanan fisik bergaya array. Tabel berikut mencantumkan tipe fisik yang didukung dan tidak didukung.
| Tipe fisik subbidang Struct | Didukung | Catatan |
|---|---|---|
Array | Didukung | Tentukan subbidang sebagai ` DataType.BOOL`. |
Array | Didukung | Tentukan subbidang sebagai DataType.INT8, DataType.INT16, DataType.INT32, atau DataType.INT64. |
Array | Didukung | Tentukan subbidang sebagai DataType.FLOAT atau DataType.DOUBLE. |
Array | Didukung | Tentukan subbidang sebagai DataType.VARCHAR dan atur max_length. |
ArrayOfVector | Didukung | Tentukan subbidang sebagai DataType.FLOAT_VECTOR dan tetapkan dim. |
ArrayOfVector | Didukung | Tentukan subbidang sebagai DataType.FLOAT16_VECTOR dan atur dim. |
ArrayOfVector | Didukung | Tentukan subbidang sebagai DataType.BFLOAT16_VECTOR dan atur dim. |
ArrayOfVector | Didukung | Tentukan subbidang sebagai DataType.INT8_VECTOR dan atur dim. |
ArrayOfVector | Didukung | Tentukan subbidang sebagai " DataType.BINARY_VECTOR " dan atur " dim". |
ArrayOfVector | Tidak didukung | Subbidang vektor sparce tidak didukung dalam bidang StructArray. |
Array | Tidak didukung | Gunakan " VARCHAR", bukan " String". |
Array | Tidak didukung | Subbidang JSON tidak didukung di bidang StructArray. |
Array | Tidak didukung | Subbidang geometri dan fungsi GIS tidak didukung dalam bidang StructArray. |
Array | Tidak didukung | Subbidang teks tidak didukung dalam bidang StructArray. |
Array | Tidak didukung | Subbidang timestamptz dan ekspresi berbasis waktu tidak didukung dalam bidang StructArray. |
Array, ArrayOfVector, Struct, atau ArrayOfStruct | Tidak didukung | Bidang StructArray tidak mendukung subbidang array bersarang, array vektor, Struct, atau Array-of-Struct. |
Batasan skema nullable dan dinamis
Perilaku StructArray yang dapat bernilai null dan penambahan bidang StructArray dinamis bergantung pada versi.
| Kemampuan | Batasan |
|---|---|
| Bidang StructArray yang dapat bernilai null | Didukung di Milvus 3.0.0 dan versi selanjutnya. Atur ` nullable=True ` pada induk StructArray; jangan mengonfigurasi subbidang Struct sebagai nullable secara terpisah. |
| Nilai null di Python | Gunakan ` None ` untuk menyisipkan nilai StructArray null di Python. Jangan gunakan ` Null ` atau ` null`. |
| Cakupan null | Null berlaku untuk seluruh bidang StructArray. Misalnya, chunks=None hanya valid jika chunks dapat bernilai null. |
| Nilai StructArray yang sebagian null | Ketika bidang StructArray berisi nilai array yang valid, jangan mencampurkan array subbidang null dengan array subbidang yang valid dalam nilai yang sama. |
| Penambahan dinamis bidang StructArray | Didukung di Milvus 3.0.0 dan versi selanjutnya. |
| Persyaratan nullable untuk penambahan dinamis | Bidang StructArray yang ditambahkan ke koleksi yang sudah ada harus dapat bernilai null karena entitas yang sudah ada tidak memiliki nilai untuk bidang baru tersebut. |
| Entitas yang sudah ada setelah penambahan dinamis | Entitas yang sudah ada mengembalik null untuk bidang StructArray yang ditambahkan. |
Milvus 3.0.0 dan rilis selanjutnya mendukung bidang StructArray yang dapat bernilai null, array vektor yang dapat bernilai null, serta penambahan bidang StructArray secara dinamis baik dalam deployment Standalone maupun Distributed. Versi Milvus sebelumnya tidak mendukung kemampuan ini.
Di Zilliz Cloud, fitur-fitur ini tersedia pada On-Demand Clusters yang menjalankan Milvus 3.0.0 atau versi yang lebih baru. Serving Clusters tidak mendukungnya.
Untuk contoh penyisipan dengan bidang StructArray yang dapat bernilai null, lihat Menyisipkan Data ke dalam Bidang StructArray.
Batas penyisipan
| Batas | Rincian |
|---|---|
| Bentuk muatan | Sisipkan bidang StructArray sebagai array objek Struct, seperti chunks: [{"text": "...", "emb": [...]}]. |
| Nama subbidang | Di dalam setiap objek Struct, gunakan nama subbidang seperti text dan emb, bukan jalur seperti chunks[text]. |
| Kesesuaian skema | Setiap elemen Struct harus sesuai dengan skema Struct. |
| Kapasitas | Jumlah elemen Struct dalam satu entitas tidak boleh melebihi max_capacity. |
| Dimensi vektor | Nilai vektor harus sesuai dengan dim yang dikonfigurasi untuk subbidang vektornya. |
| Duplikasi dalam mode pencarian | Jika Anda memerlukan pencarian EmbeddingList dan pencarian tingkat elemen, tulis vektor ke dua subbidang vektor yang terpisah. |
Batas indeks dan metrik
Subbidang vektor StructArray dapat diindeks untuk pencarian EmbeddingList atau pencarian tingkat elemen. Subbidang vektor yang sama tidak dapat menggunakan kedua keluarga metrik tersebut karena setiap bidang vektor atau subbidang vektor hanya menerima satu indeks.
| Mode pencarian | Keluarga metrik | Tingkat hasil |
|---|---|---|
| Pencarian EmbeddingList | MAX_SIM, MAX_SIM_COSINE, MAX_SIM_IP, MAX_SIM_L2, atau metrik biner MAX_SIM_* | Hasil tingkat entitas. |
| Pencarian tingkat elemen | Metrik vektor biasa seperti L2, IP, COSINE, HAMMING, atau JACCARD | Hasil tingkat elemen yang dapat mencakup offset elemen yang cocok. |
Gunakan subbidang vektor terpisah jika kedua mode tersebut diperlukan. Misalnya, gunakan ` chunks[emb_list_vector] ` untuk pencarian EmbeddingList dan ` chunks[emb] ` untuk pencarian tingkat elemen.
Subbidang vektor StructArray dihitung sebagai subbidang vektor saat Anda merencanakan skema koleksi. Pastikan jumlah total bidang vektor dan subbidang vektor tetap dalam batas versi target dan tingkatan layanan Anda.
Untuk matriks tipe indeks dan tipe metrik yang didukung, lihat Bidang StructArray Indeks.
Batas pencarian
| Perilaku pencarian | Dukungan dan batasan |
|---|---|
| Pencarian EmbeddingList Dasar | Didukung pada subbidang vektor StructArray yang diindeks dengan metrik " MAX_SIM* ". Mengembalikan hasil tingkat entitas. |
| Pencarian tingkat elemen dasar | Didukung pada subbidang vektor StructArray yang diindeks dengan metrik vektor reguler. Dapat mengembalikan offset elemen yang cocok. |
| Pencarian rentang | Didukung sesuai dengan mode pencarian dan dukungan indeks/metrik dari versi target. Untuk perilaku rentang pencarian hibrida pada permintaan StructArray tingkat elemen, periksa versi target Anda. |
| Pencarian pengelompokan | Pencarian pengelompokan tingkat elemen dapat mengembalikan offset. Perilaku pengelompokan pencarian hibrida untuk permintaan StructArray tingkat elemen bergantung pada versi. |
| Pencarian hibrida | Permintaan pencarian hibrida hanya dapat menyertakan permintaan subbidang vektor StructArray jika versi target mendukung kombinasi pencarian tersebut. Setiap permintaan tetap mengikuti keluarga metrik dari subbidang vektor yang diindeks. |
| Output offset | Offset tersedia untuk hasil pencarian tingkat elemen. Pencarian EmbeddingList mengembalikan hasil tingkat entitas dan tidak menggunakan offset elemen sebagai unit hasil utama. |
Batasan filter dan operator
Penyaringan skalar StructArray ditangani oleh operator StructArray, seperti " element_filter " dan keluarga " MATCH_* ". Matriks dukungan predikat terperinci terdapat di StructArray Operators.
Secara umum:
Gunakan predikat "
$[subfield]" hanya di dalam operator StructArray.Gunakan subbidang skalar untuk predikat skalar.
Jangan gunakan subbidang vektor sebagai masukan predikat skalar `
$[...]`.Sintaks JSON path, fungsi JSON, fungsi wadah array, fungsi pencocokan teks, fungsi Geometri/GIS, dan ekspresi Timestamptz tidak didukung untuk predikat tingkat elemen StructArray.
Lebih disarankan menggunakan perbandingan boolean eksplisit seperti `
$[has_code] == true` daripada ekspresi boolean mentah.
Halaman terkait
Untuk membuat bidang StructArray, baca Membuat Bidang StructArray.
Untuk menyisipkan data, baca " Menyisipkan Data ke dalam Bidang StructArray".
Untuk membuat indeks vektor dan skalar, baca " Index StructArray Fields".
Untuk meninjau sintaks filter StructArray, baca " Operator StructArray".