فهرسة JSON
توفر حقول JSON طريقة مرنة لتخزين البيانات الوصفية المنظمة في ميلفوس. وبدون الفهرسة، تتطلب الاستعلامات على حقول JSON عمليات مسح كاملة للمجموعة، والتي تصبح بطيئة مع نمو مجموعة بياناتك. تتيح فهرسة JSON عمليات بحث سريعة من خلال إنشاء فهارس داخل بيانات JSON الخاصة بك.
فهرسة JSON مثالية لـ
المخططات المنظمة ذات المفاتيح المتسقة والمعروفة
استعلامات المساواة والنطاق على مسارات JSON محددة
السيناريوهات التي تحتاج فيها إلى تحكم دقيق في المفاتيح المفهرسة
التسريع الفعال في التخزين للاستعلامات المستهدفة
بالنسبة لمستندات JSON المعقدة ذات أنماط استعلام متنوعة، ضع في اعتبارك فهرسة JSON Shredding كبديل.
بناء جملة فهرسة JSON
عندما تقوم بإنشاء فهرس JSON، فإنك تحدد
مسار JSON: الموقع الدقيق للبيانات التي تريد فهرستها
نوع البيانات المصبوب: كيفية تفسير وتخزين القيم المفهرسة
تحويل النوع الاختياري: تحويل البيانات أثناء الفهرسة إذا لزم الأمر
إليك بناء الجملة لفهرسة حقل JSON:
# Prepare index params
index_params = MilvusClient.prepare_index_params()
index_params.add_index(
field_name="<json_field_name>", # Name of the JSON field
index_type="AUTOINDEX", # Must be AUTOINDEX or INVERTED
index_name="<unique_index_name>", # Index name
params={
"json_path": "<path_to_json_key>", # Specific key to be indexed within JSON data
"json_cast_type": "<data_type>", # Data type to use when interpreting and indexing the value
# "json_cast_function": "<cast_function>" # Optional: convert key values into a target type at index time
}
)
المعلمة |
الوصف |
القيمة / مثال |
|---|---|---|
|
اسم حقل JSON في مخطط المجموعة. |
|
|
يجب أن يكون |
|
|
المعرف الفريد لهذا الفهرس. |
|
|
المسار إلى المفتاح الذي تريد فهرسته داخل كائن JSON الخاص بك. |
|
|
نوع البيانات المراد استخدامه عند تفسير القيمة وفهرستها. يجب أن يتطابق مع نوع البيانات الفعلي للمفتاح. للحصول على قائمة بأنواع الإرسال المتاحة، انظر أنواع الإرسال المدعومة أدناه. |
|
|
(اختياري) تحويل قيم المفتاح الأصلية إلى النوع المستهدف في وقت الفهرسة. هذا التكوين مطلوب فقط عندما يتم تخزين قيم المفاتيح بتنسيق خاطئ وتريد تحويل نوع البيانات أثناء الفهرسة. للحصول على قائمة بدوال الإرسال المتاحة، راجع دوال الإرسال المدعومة أدناه. |
|
أنواع الإرسال المدعومة
يدعم Milvus أنواع البيانات التالية للإرسال في وقت الفهرسة. تضمن هذه الأنواع تفسير بياناتك بشكل صحيح من أجل التصفية الفعالة.
نوع الإرسال |
الوصف |
مثال قيمة JSON |
|---|---|---|
|
تُستخدم لفهرسة القيم المنطقية، مما يتيح الاستعلامات التي تصفي على شروط صواب/خطأ. |
|
|
يُستخدم للقيم الرقمية، بما في ذلك الأعداد الصحيحة وأرقام الفاصلة العائمة. ويتيح التصفية بناءً على النطاقات أو المساواة (على سبيل المثال، |
|
|
يُستخدم لفهرسة قيم السلسلة، وهو أمر شائع للبيانات النصية مثل الأسماء أو الفئات أو المعرفات. |
|
|
يُستخدم لفهرسة مصفوفة من القيم المنطقية. |
|
|
يُستخدم لفهرسة مصفوفة من القيم الرقمية. |
|
|
تُستخدم لفهرسة مصفوفة من السلاسل، وهي مثالية لقائمة من العلامات أو الكلمات الرئيسية. |
|
|
كائنات JSON بأكملها أو كائنات فرعية مع الاستدلال التلقائي للنوع وتسويته. تزيد فهرسة كائنات JSON بأكملها من حجم الفهرس. بالنسبة للسيناريوهات ذات المفاتيح المتعددة، ضع في اعتبارك فهرسة JSON Shredding. |
أي كائن JSON |
يجب أن تحتوي المصفوفات على عناصر من نفس النوع للفهرسة المثلى. لمزيد من المعلومات، راجع حقل المصفوفات.
دوال الإرسال المدعومة
إذا كان مفتاح حقل JSON الخاص بك يحتوي على قيم بتنسيق غير صحيح (على سبيل المثال، الأرقام المخزنة كسلاسل)، يمكنك تمرير دالة الإرسال إلى الوسيطة json_cast_function لتحويل هذه القيم في وقت الفهرسة.
دوال الإرسال غير حساسة لحالة الأحرف. الدوال التالية مدعومة:
دالة الإرسال |
التحويل من → إلى |
حالة الاستخدام |
|---|---|---|
|
سلسلة → عددية (مزدوجة) |
تحويل |
في حالة فشل التحويل (على سبيل المثال، سلسلة غير رقمية)، يتم تخطي القيمة وعدم فهرستها.
إنشاء فهارس JSON
يوضح هذا القسم كيفية إنشاء فهارس على أنواع مختلفة من بيانات JSON باستخدام أمثلة عملية. تستخدم جميع الأمثلة نموذج بنية JSON الموضحة أدناه وتفترض أنك قد أنشأت بالفعل اتصالاً ب MilvusClient مع مخطط مجموعة محدد بشكل صحيح.
نموذج بنية JSON
{
"metadata": {
"category": "electronics",
"brand": "BrandA",
"in_stock": true,
"price": 99.99,
"string_price": "99.99",
"tags": ["clearance", "summer_sale"],
"supplier": {
"name": "SupplierX",
"country": "USA",
"contact": {
"email": "support@supplierx.com",
"phone": "+1-800-555-0199"
}
}
}
}
الإعداد الأساسي
قبل إنشاء أي فهارس JSON، قم بإعداد معلمات الفهرس:
# Prepare index params
index_params = MilvusClient.prepare_index_params()
مثال 1: فهرسة مفتاح JSON بسيط
قم بإنشاء فهرس على الحقل category لتمكين التصفية السريعة حسب فئة المنتج:
index_params.add_index(
field_name="metadata",
index_type="AUTOINDEX", # Must be set to AUTOINDEX or INVERTED for JSON path indexing
index_name="category_index", # Unique index name
params={
"json_path": 'metadata["category"]', # Path to the JSON key
"json_cast_type": "varchar" # Data cast type
}
)
مثال 2: فهرسة مفتاح متداخل
قم بإنشاء فهرس على الحقل email المتداخل بعمق للبحث عن جهات اتصال الموردين:
# Index the nested key
index_params.add_index(
field_name="metadata",
index_type="AUTOINDEX", # Must be set to AUTOINDEX or INVERTED for JSON path indexing
index_name="email_index", # Unique index name
params={
"json_path": 'metadata["supplier"]["contact"]["email"]', # Path to the nested JSON key
"json_cast_type": "varchar" # Data cast type
}
)
مثال 3: تحويل نوع البيانات في وقت الفهرس
في بعض الأحيان يتم تخزين البيانات الرقمية عن طريق الخطأ كسلاسل. استخدم الدالة STRING_TO_DOUBLE cast لتحويلها وفهرستها بشكل صحيح:
# Convert string numbers to double for indexing
index_params.add_index(
field_name="metadata",
index_type="AUTOINDEX", # Must be set to AUTOINDEX or INVERTED for JSON path indexing
index_name="string_to_double_index", # Unique index name
params={
"json_path": 'metadata["string_price"]', # Path to the JSON key to be indexed
"json_cast_type": "double", # Data cast type
"json_cast_function": "STRING_TO_DOUBLE" # Cast function; case insensitive
}
)
هام: في حالة فشل التحويل لأي مستند (على سبيل المثال، سلسلة غير رقمية مثل "invalid")، سيتم استبعاد قيمة ذلك المستند من الفهرس ولن تظهر في النتائج التي تمت تصفيتها.
مثال 4: فهرسة كائنات كاملة
قم بفهرسة كائن JSON الكامل لتمكين الاستعلامات على أي حقل داخله. عندما تستخدم json_cast_type="JSON" ، فإن النظام تلقائيًا:
تسطيح بنية JSON: يتم تحويل الكائنات المتداخلة إلى مسارات مسطحة للفهرسة الفعالة
يستنتج أنواع البيانات: يتم تصنيف كل قيمة تلقائيًا على أنها رقمية أو سلسلة أو منطقية أو تاريخية بناءً على محتواها
ينشئ تغطية شاملة: جميع المفاتيح والمسارات المتداخلة داخل الكائن تصبح قابلة للبحث
بالنسبة لعينة بنية JSON أعلاه، قم بفهرسة الكائن metadata بالكامل:
# Index the entire JSON object
index_params.add_index(
field_name="metadata",
index_type="AUTOINDEX",
index_name="metadata_full_index",
params={
"json_path": "metadata",
"json_cast_type": "JSON"
}
)
يمكنك أيضًا فهرسة جزء فقط من بنية JSON، مثل جميع المعلومات supplier:
# Index a sub-object
index_params.add_index(
field_name="metadata",
index_type="AUTOINDEX",
index_name="supplier_index",
params={
"json_path": 'metadata["supplier"]',
"json_cast_type": "JSON"
}
)
تطبيق تكوين الفهرس
بعد تحديد جميع معلمات الفهرس الخاصة بك، قم بتطبيقها على مجموعتك:
# Apply all index configurations to the collection
MilvusClient.create_index(
collection_name="your_collection_name",
index_params=index_params
)
بمجرد اكتمال الفهرسة، ستستخدم استعلامات حقول JSON الخاصة بك تلقائيًا هذه الفهارس لتحقيق أداء أسرع.
الأسئلة الشائعة
ماذا يحدث إذا كان تعبير عامل التصفية الخاص بالاستعلام يستخدم نوعًا مختلفًا عن نوع الجبيرة المفهرسة؟
إذا كان تعبير عامل التصفية الخاص بك يستخدم نوعًا مختلفًا عن نوع الفهرس json_cast_type ، فلن يستخدم ميلفوس الفهرس وقد يعود إلى مسح فوري أبطأ إذا سمحت البيانات بذلك. للحصول على أفضل أداء، قم دائمًا بمحاذاة تعبير التصفية الخاص بك مع نوع الفهرس المصبوب. على سبيل المثال، إذا تم إنشاء فهرس رقمي باستخدام json_cast_type="double" ، فإن شروط التصفية الرقمية فقط هي التي ستستفيد من الفهرس.
عند إنشاء فهرس JSON، ماذا لو كان مفتاح JSON يحتوي على أنواع بيانات غير متسقة عبر كيانات مختلفة؟
يمكن أن تؤدي الأنواع غير المتسقة إلى فهرسة جزئية. على سبيل المثال، إذا تم تخزين حقل metadata["price"] كرقم (99.99) وسلسلة ("99.99") وقمت بإنشاء فهرس باستخدام json_cast_type="double" ، سيتم فهرسة القيم الرقمية فقط. سيتم تخطي إدخالات نموذج السلسلة ولن تظهر في نتائج التصفية.
هل يمكنني إنشاء فهارس متعددة على نفس مفتاح JSON؟
لا، كل مفتاح JSON يدعم فهرسًا واحدًا فقط. يجب عليك اختيار فهرس واحد json_cast_type يطابق بياناتك. ومع ذلك، يمكنك إنشاء فهرس على كائن JSON بأكمله وفهرس على مفتاح متداخل داخل هذا الكائن.
هل يدعم حقل JSON تعيين قيمة افتراضية؟
لا، لا تدعم حقول JSON القيم الافتراضية. ومع ذلك، يمكنك تعيين nullable=True عند تعريف الحقل للسماح بإدخالات فارغة. لمزيد من المعلومات، راجع Nullable & Default.