القيم الافتراضية
يسمح لك Milvus بتعيين القيم الافتراضية للحقول القياسية (باستثناء الحقل الأساسي). عندما يتم تكوين قيمة افتراضية لحقل ما، يطبق ميلفوس هذه القيمة تلقائيًا إذا لم يتم توفير بيانات أثناء الإدراج.
تعمل القيم الافتراضية على تبسيط ترحيل البيانات من أنظمة قواعد البيانات الأخرى إلى ملفوس من خلال الحفاظ على إعدادات القيمة الافتراضية الحالية. يمكنك أيضًا استخدام القيم الافتراضية للحقول التي قد تكون القيم فيها غير مؤكدة في وقت الإدراج.
الحدود
تدعم الحقول القياسية فقط القيم الافتراضية. لا يمكن أن تحتوي الحقول الأساسية والحقول المتجهة على قيم افتراضية.
JSONوالحقولARRAYلا تدعم القيم الافتراضية.يمكن تكوين القيم الافتراضية فقط أثناء إنشاء المجموعة ولا يمكن تعديلها بعد ذلك.
تعيين القيم الافتراضية
عند إنشاء مجموعة، استخدم المعلمة default_value في add_field() لتحديد القيمة الافتراضية للحقل.
ينشئ المثال التالي مجموعة تحتوي على حقلين قياسيين لهما قيم افتراضية: age افتراضيًا إلى 18 و status افتراضيًا إلى "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
إدراج الكيانات
عند إدراج البيانات، إذا حذفت حقلاً له قيمة افتراضية أو قمت بتعيينه صراحةً إلى NULL، يستخدم Milvus تلقائيًا القيمة الافتراضية المكوّنة.
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
البحث والاستعلام بالقيم الافتراضية
تتصرف الكيانات التي تحتوي على قيم افتراضية مثل أي كيانات أخرى أثناء عمليات البحث عن المتجهات والتصفية القياسية. يمكنك التصفية حسب القيم الافتراضية في كل من عمليتي search و query.
يبحث المثال التالي عن الكيانات حيث age يساوي القيمة الافتراضية 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
يمكنك أيضًا الاستعلام عن الكيانات عن طريق مطابقة القيم الافتراضية مباشرةً:
# 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
القواعد القابلة للتطبيق
عندما يتم تكوين كل من nullable و default_value لحقل ما، تحدد القواعد التالية كيفية تعامل ميلفوس مع المدخلات الفارغة أو قيم الحقل المفقودة أثناء الإدراج.
لاغية |
القيمة الافتراضية |
إدخال المستخدم |
النتيجة |
|---|---|---|---|
✅ |
✅ (غير فارغة) |
فارغة أو محذوفة |
يستخدم القيمة الافتراضية |
✅ |
❌ |
فارغة أو محذوفة |
يتم تخزينها كقيمة فارغة |
❌ |
✅ (غير فارغة) |
فارغة أو محذوفة |
يستخدم القيمة الافتراضية |
❌ |
❌ |
غير موجودة أو محذوفة |
إلقاء خطأ |
❌ |
✅ (NULL) |
فارغة أو محذوفة |
يلقي خطأ |
الخلاصة الرئيسية:
عندما يكون للحقل قيمة افتراضية غير فارغة، يتم استخدام تلك القيمة بغض النظر عما إذا كان
nullableممكّنًا أم لا.عندما
nullable=Trueولكن لم يتم تعيين قيمة افتراضية، يتم تخزين الحقل NULL.عند
nullable=Falseولم يتم تعيين قيمة افتراضية، يفشل الإدراج مع حدوث خطأ.يعد تعيين قيمة افتراضية فارغة في حقل غير قابل للفراغ غير صالح ويتسبب في حدوث خطأ.