Nilai Default
Milvus memungkinkan Anda untuk mengatur nilai default untuk field skalar (tidak termasuk field utama). Ketika sebuah field memiliki nilai default yang telah dikonfigurasikan, Milvus akan secara otomatis menggunakan nilai tersebut jika tidak ada data yang diberikan selama proses penyisipan.
Nilai default menyederhanakan migrasi data dari sistem database lain ke Milvus dengan mempertahankan pengaturan nilai default yang sudah ada. Anda juga dapat menggunakan nilai default untuk field yang nilainya tidak pasti pada saat penyisipan.
Batasan
Hanya bidang skalar yang mendukung nilai default. Bidang utama dan bidang vektor tidak dapat memiliki nilai default.
JSONdanARRAYtidak mendukung nilai default.Nilai default hanya dapat dikonfigurasi selama pembuatan koleksi dan tidak dapat dimodifikasi setelahnya.
Mengatur nilai default
Saat membuat koleksi, gunakan parameter default_value di add_field() untuk menentukan nilai default untuk sebuah field.
Contoh berikut ini membuat koleksi dengan dua bidang skalar yang memiliki nilai default: age default ke 18 dan status default ke "active".
from pymilvus import MilvusClient, DataType
client = MilvusClient(uri='http://localhost:19530')
# Define collection schema
schema = client.create_schema(
auto_id=False,
enable_dynamic_schema=True,
)
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)
schema.add_field(field_name="age", datatype=DataType.INT64, default_value=18)
schema.add_field(field_name="status", datatype=DataType.VARCHAR, default_value="active", max_length=10)
# Set index params
index_params = client.prepare_index_params()
index_params.add_index(field_name="vector", index_type="AUTOINDEX", metric_type="L2")
# Create collection
client.create_collection(collection_name="my_collection", schema=schema, index_params=index_params)
// java
// js
// go
# restful
Menyisipkan entitas
Ketika menyisipkan data, jika Anda menghilangkan field yang memiliki nilai default atau secara eksplisit mengaturnya menjadi NULL, Milvus secara otomatis menggunakan nilai default yang telah dikonfigurasi.
data = [
# All fields provided explicitly
{"id": 1, "vector": [0.1, 0.2, 0.3, 0.4, 0.5], "age": 30, "status": "premium"},
# age and status omitted → both use default values (18 and "active")
{"id": 2, "vector": [0.2, 0.3, 0.4, 0.5, 0.6]},
# status set to None → uses default value "active"
{"id": 3, "vector": [0.3, 0.4, 0.5, 0.6, 0.7], "age": 25, "status": None},
# age set to None → uses default value 18
{"id": 4, "vector": [0.4, 0.5, 0.6, 0.7, 0.8], "age": None, "status": "inactive"}
]
client.insert(collection_name="my_collection", data=data)
// java
// js
// go
# restful
Pencarian dan kueri dengan nilai default
Entitas yang mengandung nilai default berperilaku sama dengan entitas lain selama pencarian vektor dan pemfilteran skalar. Anda dapat memfilter berdasarkan nilai default dalam operasi search dan query.
Contoh berikut ini mencari entitas di mana age sama dengan nilai default 18:
res = client.search(
collection_name="my_collection",
data=[[0.1, 0.2, 0.4, 0.3, 0.5]],
search_params={"params": {"nprobe": 16}},
filter="age == 18",
limit=10,
output_fields=["id", "age", "status"]
)
print("Search results (age == 18):")
for hit in res[0]:
print(f" id: {hit['id']}, age: {hit['entity']['age']}, status: {hit['entity']['status']}")
// java
// js
// go
# restful
Output:
Search results (age == 18):
id: 2, age: 18, status: active
id: 4, age: 18, status: inactive
Anda juga dapat melakukan kueri entitas dengan mencocokkan nilai default secara langsung:
# Query entities where age equals the default value (18)
default_age_results = client.query(
collection_name="my_collection",
filter="age == 18",
output_fields=["id", "age", "status"]
)
print("\nQuery results (age == 18):")
for r in default_age_results:
print(f" id: {r['id']}, age: {r['age']}, status: {r['status']}")
# Query entities where status equals the default value ("active")
default_status_results = client.query(
collection_name="my_collection",
filter='status == "active"',
output_fields=["id", "age", "status"]
)
print("\nQuery results (status == 'active'):")
for r in default_status_results:
print(f" id: {r['id']}, age: {r['age']}, status: {r['status']}")
// java
// js
// go
# restful
Query results (age == 18):
id: 2, age: 18, status: active
id: 4, age: 18, status: inactive
Query results (status == 'active'):
id: 2, age: 18, status: active
id: 3, age: 25, status: active
Aturan yang berlaku
Ketika nullable dan default_value dikonfigurasikan untuk sebuah bidang, aturan berikut ini menentukan bagaimana Milvus menangani masukan NULL atau nilai bidang yang hilang selama penyisipan.
Dapat dinihilkan |
Nilai Default |
Masukan Pengguna |
Hasil |
|---|---|---|---|
✅ |
✅ (bukan NULL) |
NULL atau dihilangkan |
Menggunakan nilai default |
✅ |
❌ |
NULL atau dihilangkan |
Disimpan sebagai NULL |
❌ |
✅ (bukan NULL) |
NULL atau dihilangkan |
Menggunakan nilai default |
❌ |
❌ |
NULL atau dihilangkan |
Melemparkan kesalahan |
❌ |
✅ (NULL) |
NULL atau dihilangkan |
Melemparkan kesalahan |
Hal-hal penting:
Ketika sebuah bidang memiliki nilai default non-NULL, nilai tersebut akan digunakan terlepas dari apakah
nullablediaktifkan.Bila
nullable=Truetetapi tidak ada nilai default yang ditetapkan, bidang tersebut menyimpan NULL.Bila
nullable=Falsedan tidak ada nilai default yang ditetapkan, penyisipan akan gagal dengan kesalahan.Menetapkan nilai default NULL pada bidang yang tidak dapat dinullkan adalah tidak valid dan menyebabkan kesalahan.