المشغلات الأساسية
يوفر Milvus مجموعة غنية من العوامل الأساسية لمساعدتك في تصفية البيانات والاستعلام عنها بكفاءة. تتيح لك هذه العوامل تحسين شروط البحث بناءً على الحقول القياسية، والحسابات الرقمية، والشروط المنطقية، وغير ذلك. يعد فهم كيفية استخدام هذه العوامل أمرًا بالغ الأهمية لإنشاء استعلامات دقيقة وتحقيق أقصى قدر من الكفاءة في عمليات البحث.
عوامل المقارنة
تُستخدم عوامل المقارنة لتصفية البيانات بناءً على المساواة أو عدم المساواة أو الحجم. وهي قابلة للتطبيق على الحقول الرقمية والنصية.
عوامل المقارنة المدعومة
==(يساوي)!=(لا يساوي)>(أكبر من)<(أصغر من)>=(أكبر من أو يساوي)<=(أصغر من أو يساوي)
المثال 1: التصفية باستخدام "يساوي" (==)
افترض أن لديك حقلًا باسم status وتريد العثور على جميع الكيانات التي تكون فيها قيمة status هي "active". يمكنك استخدام عامل المساواة ==:
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'
عوامل النطاق
تساعد عوامل النطاق في تصفية البيانات بناءً على مجموعة محددة من القيم. يدعم Milvus IN للتحقق من الانتماء إلى المجموعة.
إذا كنت تريد العثور على جميع الكيانات التي يكون فيها " color " إما "red" أو "green" أو "blue":
filter = 'color in ["red", "green", "blue"]'
يُعد هذا مفيدًا عندما تريد التحقق من الانتماء إلى قائمة من القيم.
مشغلات مطابقة الأنماط
تساعد عوامل مطابقة الأنماط في تصفية قيم السلاسل بناءً على أنماط أحرف البدل أو التعبيرات العادية.
LIKE: تُستخدم لمطابقة أنماط أحرف البدل البسيطة على قيم السلاسل. على سبيل المثال، تتطابقname LIKE "Prod%"مع القيم التي تبدأ بـProd.=~: تُستخدم لمطابقة قيمة سلسلة مع تعبير عادي RE2. على سبيل المثال، تتطابقcode =~ "E[0-9]{4}"مع القيم التي تحتوي على رمز خطأ مثلE1001.!~: يُستخدم لاستبعاد قيم السلاسل التي تتطابق مع تعبير عادي RE2. وهذا يعادلNOT (field =~ "pattern").
للعثور على الكيانات التي تبدأ قيمة name فيها بـ Prod:
filter = 'name LIKE "Prod%"'
للعثور على الكيانات التي يحتوي code الخاص بها على رمز خطأ مثل E1001:
filter = 'code =~ "E[0-9]{4}"'
لاستبعاد الكيانات التي يبدأ عنوان message الخاص بها بـ DEBUG:
filter = 'message !~ "^DEBUG"'
لمزيد من التفاصيل حول الاختيار بين LIKE و regex، وأنواع الحقول المدعومة، وصيغة regex، وقواعد الهروب، والأداء، راجع مطابقة الأنماط. يتيح لك Milvus أيضًا إنشاء فهرس NGRAM على حقول VARCHAR أو مسارات سلاسل JSON لتسريع عوامل تصفية مطابقة الأنماط المؤهلة. لمزيد من التفاصيل، راجع NGRAM.
المُشغِّلات الحسابية
تتيح لك العوامل الحسابية إنشاء شروط تستند إلى حسابات تتضمن حقولًا رقمية.
المعاملات الحسابية المدعومة
+(الجمع)-(الطرح)*(الضرب)/(القسمة)%(المقدار)**(الرفع إلى القوة)
المثال 1: استخدام المودولوس (%)
لإيجاد القيم التي يكون فيها id عددًا زوجيًا (أي قابلًا للقسمة على 2):
filter = 'id % 2 == 0'
المثال 2: استخدام الأُس (**)
لإيجاد القيم التي يكون فيها price مرفوعًا إلى القوة 2 أكبر من 1000:
filter = 'price ** 2 > 1000'
المشغلات البتيةCompatible with Milvus 3.0.0+
تُعد العوامل البتية مفيدة عندما يقوم حقل عدد صحيح بترميز علامات متعددة، مثل الأذونات أو علامات الميزات أو بتات الحالة. يمكنك استخدام هذه العوامل في تعبيرات التصفية للتحقق من البتات الفردية في قيمة عدد صحيح أو دمجها أو مقارنتها.
بالنسبة للحقول القياسية، تنطبق عوامل التشغيل البتية على أنواع الحقول الصحيحة، مثل INT8 و INT16 و INT32 و INT64.
المشغلات البتية المدعومة
| المُشغِّل | الاسم | الاستخدام النموذجي |
|---|---|---|
& | العمليّة "AND" على مستوى البتات | التحقق مما إذا كانت بتات معينة محددة أم لا. |
| | العمليات الحسابية على مستوى البتات OR | دمج البتات قبل المقارنة. |
^ | العمليات على مستوى البتات XOR | قارن الاختلافات في البتات بين قيمتين. |
مثال: التصفية حسب بتات الأذونات
افترض أن لديك حقلًا صحيحًا باسم permissions ، وأن كل بت في هذا العدد الصحيح يمثل علامة أذونات:
| علامة الأذونات | قيمة البت |
|---|---|
READ | 1 |
WRITE | 2 |
SHARE | 4 |
ADMIN | 8 |
على سبيل المثال، permissions = 5 يعني أن بتتي READ و SHARE محددان، لأن 5 = 1 + 4.
للعثور على الكيانات التي تم تعيين بت SHARE فيها، استخدم عملية «AND» على مستوى البتات (&):
filter = "(permissions & 4) == 4"
للعثور على الكيانات التي يؤدي فيها تعيين بت WRITE إلى إنتاج مجموعة أذونات READ + WRITE + SHARE ، استخدم عملية OR على مستوى البتات (|):
filter = "(permissions | 2) == 7"
للعثور على الكيانات التي تختلف بتات أذوناتها عن READ + WRITE + SHARE في بت WRITE فقط، استخدم عملية XOR على مستوى البتات (^):
filter = "(permissions ^ 7) == 2"
احرص دائمًا على وضع العملية البتية بين قوسين قبل مقارنة النتيجة، مثل (permissions & 4) == 4. يدعم Milvus 3.0.0 & و | و ^ في تعبيرات التصفية. لا يتم دعم عملية NOT البتية (~) وعوامل الإزاحة (<< و >>).
المشغلات المنطقية
تُستخدم العوامل المنطقية لدمج شروط متعددة في تعبير تصفية أكثر تعقيدًا. وتشمل هذه العوامل AND ، و OR ، و NOT.
المشغلات المنطقية المدعومة
AND: يجمع بين شروط متعددة يجب أن تكون جميعها صحيحة.OR: يجمع بين الشروط بحيث يجب أن يكون واحد منها على الأقل صحيحًا.NOT: ينفي شرطًا.
المثال 1: استخدام AND لدمج الشروط
لإيجاد جميع المنتجات التي يكون فيها « price » أكبر من 100 و« stock » أكبر من 50:
filter = 'price > 100 AND stock > 50'
المثال 2: استخدام OR لدمج الشروط
للبحث عن جميع المنتجات التي يكون فيها color إما "red" أو "blue":
filter = 'color == "red" OR color == "blue"'
المثال 3: استخدام NOT لاستبعاد شرط
للعثور على جميع المنتجات التي يكون فيها color غير "green":
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.
الحقول العددية العادية ذات القيم الفارغة
يسمح Milvus بالتصفية على الحقول العددية العادية، مثل السلاسل أو الأرقام، التي تحتوي على قيم فارغة.
لا تُعامل السلسلة الفارغة "" كقيمة فارغة لحقل 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 بالكامل صراحةً إلى None (فارغ)، على سبيل المثال،
{"metadata": None}.الحقل JSON نفسه مفقود تمامًا من الكيان.
إذا كانت بعض العناصر داخل كائن JSON ذات قيم null (مثل مفاتيح فردية)، فإن الحقل لا يزال يُعتبر غير null. على سبيل المثال، لا يُعامل \{"metadata": \{"category": None, "price": 99.99}} على أنه null، على الرغم من أن المفتاح category هو null.
لتوضيح كيفية تعامل 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 إما مفقودًا أو مضبوطًا صراحةً على None:
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 بالكامل صراحةً إلى None (فارغ)، على سبيل المثال،
"tags": None.يكون حقل ARRAY مفقودًا تمامًا من الكيان.
لا يمكن أن يحتوي حقل 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 فارغًا
لاسترداد الكيانات التي يكون فيها حقل 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" فارغة
لاسترداد الكيانات التي لا يكون فيها حقل 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
على الرغم من أن العوامل الأساسية في Milvus متعددة الاستخدامات ويمكن تطبيقها على الحقول القياسية، إلا أنه يمكن أيضًا استخدامها بفعالية مع المفاتيح والفهارس في حقول JSON وARRAY.
على سبيل المثال، إذا كان لديك حقل " product " يحتوي على مفاتيح متعددة مثل price و model و tags ، فقم دائمًا بالإشارة إلى المفتاح مباشرةً:
filter = 'product["price"] > 1000'
للعثور على السجلات التي تتجاوز فيها درجة الحرارة الأولى في مصفوفة درجات الحرارة المسجلة قيمة معينة، استخدم:
filter = 'history_temperatures[0] > 30'
الخلاصة
يوفر Milvus مجموعة من العوامل الأساسية التي تمنحك المرونة في تصفية بياناتك والاستعلام عنها. من خلال الجمع بين عوامل المقارنة والنطاق والحسابية والمنطقية، يمكنك إنشاء تعبيرات تصفية قوية لتضييق نطاق نتائج البحث واسترداد البيانات التي تحتاجها بكفاءة.
الأسئلة الشائعة
هل هناك حد لطول قائمة قيم المطابقة في شروط التصفية (على سبيل المثال، filter=’color in ["red", "green", “blue”]')؟ ماذا أفعل إذا كانت القائمة طويلة جدًا؟
لا تفرض Zilliz Cloud حدًا أقصى لطول قائمة قيم المطابقة في شروط التصفية. ومع ذلك، يمكن أن تؤثر القائمة الطويلة جدًّا بشكل كبير على أداء الاستعلام. إذا كانت شروط التصفية الخاصة بك تتضمن قائمة طويلة من قيم المطابقة أو تعبيرًا معقدًا يحتوي على العديد من العناصر، نوصي باستخدام «قوالب التصفية» لتحسين أداء الاستعلام.