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.

  • JSON dan ARRAY tidak 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

Keluaran yang diharapkan

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

Keluaran yang diharapkan

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 nullable diaktifkan.

  • Bila nullable=True tetapi tidak ada nilai default yang ditetapkan, bidang tersebut menyimpan NULL.

  • Bila nullable=False dan 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.

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?