المشغلات الأساسية

يوفر ميلفوس مجموعة غنية من العوامل الأساسية لمساعدتك في تصفية البيانات والاستعلام عنها بكفاءة. تسمح لك هذه المعاملات بتحسين شروط البحث الخاصة بك بناءً على الحقول القياسية والحسابات الرقمية والشروط المنطقية وغيرها. يعد فهم كيفية استخدام هذه العوامل أمرًا بالغ الأهمية لبناء استعلامات دقيقة وزيادة كفاءة عمليات البحث الخاصة بك.

عوامل المقارنة

تُستخدم عوامل المقارنة لتصفية البيانات بناءً على التساوي أو عدم المساواة أو الحجم. وهي قابلة للتطبيق على الحقول الرقمية والنصية.

عوامل المقارنة المدعومة:

  • == (يساوي)

  • != (لا يساوي)

  • > (أكبر من)

  • < (أقل من)

  • >= (أكبر من أو يساوي)

  • <= (أقل من أو يساوي)

مثال 1: التصفية باستخدام يساوي إلى (==)

افترض أن لديك حقلًا باسم status وتريد العثور على جميع الكيانات التي يكون فيها status "نشط". يمكنك استخدام عامل المساواة ==:

filter = 'status == "active"'

مثال 2: التصفية باستخدام لا يساوي (!=)

للعثور على الكيانات حيث status ليس "غير نشط":

filter = 'status != "inactive"'

مثال 3: التصفية باستخدام أكبر من (>)

إذا كنت تريد العثور على جميع الكيانات التي تحتوي على age أكبر من 30

filter = 'age > 30'

مثال 4: التصفية باستخدام أقل من

للعثور على الكيانات التي يكون فيها price أقل من 100:

filter = 'price < 100'

مثال 5: التصفية باستخدام أكبر من أو يساوي (>=)

إذا كنت تريد العثور على جميع الكيانات ذات rating أكبر من أو يساوي 4

filter = 'rating >= 4'

مثال 6: التصفية باستخدام أقل من أو يساوي إلى

للعثور على الكيانات التي تحتوي على discount أقل من أو يساوي 10٪:

filter = 'discount <= 10'

عوامل النطاق

تساعد عوامل المدى في تصفية البيانات بناءً على مجموعات أو نطاقات محددة من القيم.

معاملات النطاق المدعومة:

  • IN: تستخدم لمطابقة القيم ضمن مجموعة أو نطاق محدد.

  • LIKE: تُستخدم لمطابقة نمط (في الغالب للحقول النصية). يسمح لك Milvus بإنشاء فهرس NGRAM على حقول VARCHAR أو JSON لتسريع الاستعلامات النصية. لمزيد من التفاصيل، راجع NGRAM.

مثال 1: استخدام IN لمطابقة قيم متعددة

إذا كنت تريد العثور على جميع الكيانات التي يكون فيها color إما "أحمر" أو "أخضر" أو "أزرق":

filter = 'color in ["red", "green", "blue"]'

يكون هذا مفيدًا عندما تريد التحقق من العضوية في قائمة من القيم.

مثال 2: استخدام LIKE لمطابقة الأنماط

يُستخدم المشغل LIKE لمطابقة الأنماط في حقول السلاسل. يمكنه مطابقة السلاسل الفرعية في مواضع مختلفة داخل النص: كبادئة أو لاحقة أو لاحقة. يستخدم المشغل LIKE الرمز % كحرف بدل، والذي يمكن أن يطابق أي عدد من الأحرف (بما في ذلك الصفر).

في معظم الحالات، تكون مطابقة اللواحق أو اللواحق أبطأ بكثير من مطابقة البادئة. استخدمها بحذر إذا كان الأداء حرجًا.

مطابقة البادئة (يبدأ ب)

لإجراء مطابقة البادئة، حيث تبدأ السلسلة بنمط معين، يمكنك وضع النمط في البداية واستخدام % لمطابقة أي أحرف تليه. على سبيل المثال، للعثور على جميع المنتجات التي يبدأ اسمها name بـ "Prod":

filter = 'name LIKE "Prod%"'

سوف يطابق هذا أي منتج يبدأ اسمه بـ "Prod"، مثل "المنتج أ"، "المنتج ب"، إلخ.

مطابقة لاحقة (تنتهي بـ)

لمطابقة اللاحقة، حيث تنتهي السلسلة بنمط معين، ضع الرمز % في بداية النمط. على سبيل المثال، للعثور على جميع المنتجات التي ينتهي اسمها name بـ "XYZ":

filter = 'name LIKE "%XYZ"'

سيؤدي هذا إلى مطابقة أي منتج ينتهي اسمه بـ "XYZ"، مثل "ProductXYZ" أو "SampleXYZ"، إلخ.

مطابقة لاحقة (يحتوي على)

لإجراء تطابق لاحق، حيث يمكن أن يظهر النمط في أي مكان في السلسلة، يمكنك وضع الرمز % في بداية النمط ونهايته. على سبيل المثال، للعثور على جميع المنتجات التي يحتوي name على كلمة "Pro":

filter = 'name LIKE "%Pro%"'

سيطابق هذا أي منتج يحتوي اسمه على السلسلة الفرعية "Pro"، مثل "منتج" أو "ProLine" أو "ProPro" أو "SuperPro".

المعاملات الحسابية

تسمح لك العوامل الحسابية بإنشاء شروط تستند إلى عمليات حسابية تتضمن حقول رقمية.

المعاملات الحسابية المدعومة:

  • + (الجمع)

  • - (الطرح)

  • * (الضرب)

  • / (القسمة)

  • % (المقياس)

  • ** (الأس)

مثال 1: استخدام المقياس (%)

لإيجاد الكيانات التي يكون فيها id عددًا زوجيًا (أي يقبل القسمة على 2):

filter = 'id % 2 == 0'

مثال 2: استخدام الأس (**)

للعثور على الكيانات التي يكون فيها price مرفوعًا للقوة 2 أكبر من 1000:

filter = 'price ** 2 > 1000'

المعاملات المنطقية

تُستخدم العوامل المنطقية لدمج شروط متعددة في تعبير مرشح أكثر تعقيدًا. وتشمل هذه AND و OR و NOT.

المعاملات المنطقية المدعومة:

  • AND: يجمع بين عدة شروط يجب أن تكون جميعها صحيحة.

  • OR: يجمع بين شروط يجب أن يكون أحدها على الأقل صحيحًا.

  • NOT: ينفي الشرط.

مثال 1: استخدام AND للجمع بين الشروط

للعثور على جميع المنتجات التي يكون فيها price أكبر من 100 و stock أكبر من 50:

filter = 'price > 100 AND stock > 50'

مثال 2: استخدام OR لدمج الشروط

للعثور على جميع المنتجات التي يكون فيها color إما "أحمر" أو "أزرق":

filter = 'color == "red" OR color == "blue"'

مثال 3: استخدام NOT لاستبعاد شرط

للعثور على جميع المنتجات حيث color ليس "أخضر":

filter = 'NOT color == "green"'

المشغلان IS NULL و IS NOT NULL

يتم استخدام المشغّلين IS NULL و IS NOT NULL لتصفية الحقول بناءً على ما إذا كانت تحتوي على قيمة فارغة (عدم وجود بيانات).

  • IS NULL: يحدد الكيانات التي يحتوي فيها حقل معين على قيمة فارغة، أي أن القيمة غير موجودة أو غير محددة.

  • IS NOT NULL: يحدد الكيانات التي يحتوي فيها حقل معين على أي قيمة أخرى غير فارغة، أي أن الحقل يحتوي على قيمة صحيحة ومحددة.

العوامل غير حساسة لحالة الأحرف، لذا يمكنك استخدام IS NULL أو is null ، و IS NOT NULL أو is not null.

الحقول العددية العادية ذات القيم الفارغة

يسمح ميلفوس بالتصفية على الحقول العددية العادية، مثل السلاسل أو الأرقام، ذات القيم الفارغة.

لا يتم التعامل مع السلسلة الفارغة "" كقيمة فارغة لحقل VARCHAR.

لاسترداد الكيانات التي يكون فيها الحقل description فارغًا:

filter = 'description IS NULL'

لاسترداد الكيانات التي يكون فيها الحقل description غير فارغ:

filter = 'description IS NOT NULL'

لاسترداد الكيانات التي يكون فيها الحقل description غير فارغ والحقل price أعلى من 10:

filter = 'description IS NOT NULL AND price > 10'

حقول JSON ذات القيم الفارغة

يسمح Milvus بالتصفية على حقول JSON التي تحتوي على قيم فارغة. يتم التعامل مع حقل JSON على أنه فارغ بالطرق التالية:

  • يتم تعيين كائن JSON بأكمله بشكل صريح إلى لا شيء (فارغ)، على سبيل المثال، {"metadata": None}.

  • يكون حقل JSON نفسه مفقودًا تمامًا من الكيان.

إذا كانت بعض العناصر داخل كائن JSON فارغة (مثل المفاتيح الفردية)، يظل الحقل يعتبر غير فارغ. على سبيل المثال، لا يتم التعامل مع \{"metadata": \{"category": None, "price": 99.99}} على أنه فارغ، على الرغم من أن المفتاح category فارغ.

لمزيد من التوضيح لكيفية تعامل Milvus مع حقول JSON ذات القيم الفارغة، انظر إلى نموذج البيانات التالي مع حقل JSON metadata:

data = [
  {
      "metadata": {"category": "electronics", "price": 99.99, "brand": "BrandA"},
      "pk": 1,
      "embedding": [0.12, 0.34, 0.56]
  },
  {
      "metadata": None, # Entire JSON object is null
      "pk": 2,
      "embedding": [0.56, 0.78, 0.90]
  },
  {  # JSON field `metadata` is completely missing
      "pk": 3,
      "embedding": [0.91, 0.18, 0.23]
  },
  {
      "metadata": {"category": None, "price": 99.99, "brand": "BrandA"}, # Individual key value is null
      "pk": 4,
      "embedding": [0.56, 0.38, 0.21]
  }
]

مثال 1: استرداد الكيانات التي تكون فيها البيانات الوصفية فارغة

للعثور على الكيانات التي يكون فيها الحقل metadata إما مفقودًا أو تم تعيينه صراحةً إلى لا شيء:

filter = 'metadata IS NULL'

# Example output:
# data: [
#     "{'metadata': None, 'pk': 2}",
#     "{'metadata': None, 'pk': 3}"
# ]

مثال 2: استرداد الكيانات التي تكون فيها البيانات الوصفية غير فارغة

للعثور على الكيانات التي يكون فيها الحقل metadata غير فارغ:

filter = 'metadata IS NOT NULL'

# Example output:
# data: [
#     "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
#     "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]

حقول ARRAY ذات القيم الفارغة

يسمح Milvus بالتصفية على حقول ARRAY التي تحتوي على قيم فارغة. يتم التعامل مع حقل ARRAY على أنه فارغ بالطرق التالية:

  • يتم تعيين حقل ARRAY بالكامل إلى لا شيء (فارغ)، على سبيل المثال، "tags": None.

  • يكون حقل ARRAY مفقودًا تمامًا من الكيان.

لا يمكن أن يحتوي حقل ARRAY على قيم فارغة جزئية لأن جميع العناصر في حقل ARRAY يجب أن يكون لها نفس نوع البيانات. لمزيد من التفاصيل، راجع حقل المصفوفة.

لمزيد من التوضيح لكيفية تعامل Milvus مع حقول ARRAY ذات القيم الفارغة، انظر نموذج البيانات التالي مع حقل ARRAY tags:

data = [
  {
      "tags": ["pop", "rock", "classic"],
      "ratings": [5, 4, 3],
      "pk": 1,
      "embedding": [0.12, 0.34, 0.56]
  },
  {
      "tags": None,  # Entire ARRAY is null
      "ratings": [4, 5],
      "pk": 2,
      "embedding": [0.78, 0.91, 0.23]
  },
  {  # The tags field is completely missing
      "ratings": [9, 5],
      "pk": 3,
      "embedding": [0.18, 0.11, 0.23]
  }
]

مثال 1: استرداد الكيانات التي تكون فيها العلامات فارغة

لاسترداد الكيانات التي يكون فيها الحقل tags إما مفقودًا أو تم تعيينه صراحةً إلى None:

filter = 'tags IS NULL'

# Example output:
# data: [
#     "{'tags': None, 'ratings': [4, 5], 'embedding': [0.78, 0.91, 0.23], 'pk': 2}",
#     "{'tags': None, 'ratings': [9, 5], 'embedding': [0.18, 0.11, 0.23], 'pk': 3}"
# ]

مثال 2: استرداد الكيانات التي تكون فيها العلامات غير فارغة

لاسترداد الكيانات حيث يكون الحقل tags غير فارغ:

filter = 'tags IS NOT NULL'

# Example output:
# data: [
#     "{'metadata': {'category': 'electronics', 'price': 99.99, 'brand': 'BrandA'}, 'pk': 1}",
#     "{'metadata': {'category': None, 'price': 99.99, 'brand': 'BrandA'}, 'pk': 4}"
# ]

نصائح حول استخدام عوامل التشغيل الأساسية مع حقول JSON و ARRAY

في حين أن المشغلات الأساسية في ميلفوس متعددة الاستخدامات ويمكن تطبيقها على الحقول القياسية، إلا أنه يمكن استخدامها أيضًا بفعالية مع المفاتيح والفهارس في حقلي JSON و ARRAY.

على سبيل المثال، إذا كان لديك حقل product يحتوي على مفاتيح متعددة مثل price و model و tags ، فقم دائمًا بالرجوع إلى المفتاح مباشرةً:

filter = 'product["price"] > 1000'

للعثور على السجلات التي تتجاوز فيها درجة الحرارة الأولى في مصفوفة من درجات الحرارة المسجلة قيمة معينة، استخدم:

filter = 'history_temperatures[0] > 30'

خاتمة

يقدم Milvus مجموعة من العوامل الأساسية التي تمنحك المرونة في تصفية بياناتك والاستعلام عنها. من خلال الجمع بين المقارنة والنطاق والعوامل الحسابية والمنطقية، يمكنك إنشاء تعبيرات تصفية قوية لتضييق نطاق نتائج البحث واسترداد البيانات التي تحتاجها بكفاءة.

الأسئلة الشائعة

هل هناك حد لطول قائمة قيمة المطابقة في شروط التصفية (على سبيل المثال، فلتر="لون في ["أحمر"، "أخضر"، "أزرق"]"؟ ماذا أفعل إذا كانت القائمة طويلة جدًا؟

لا تفرض Zilliz Cloud حدًا للطول على قائمة قيم المطابقة في شروط التصفية. ومع ذلك، يمكن للقائمة الطويلة جدًا أن تؤثر بشكل كبير على أداء الاستعلام. إذا كان شرط التصفية الخاص بك يتضمن قائمة طويلة من قيم المطابقة أو تعبيرًا معقدًا يحتوي على العديد من العناصر، نوصي باستخدام "تصفية النمذجة" لتحسين أداء الاستعلام.

جدول المحتويات

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟