عوامل تشغيل مقارنة OData في Azure Cognitive Search - eqو , , , , gegtltو nele

تتمثل العملية الأساسية في تعبير عامل تصفية OData في Azure Cognitive Search في مقارنة حقل بقيمة معينة. هناك نوعان من المقارنة ممكنان - مقارنة المساواة ، ومقارنة النطاق. يمكنك استخدام عوامل التشغيل التالية لمقارنة حقل بقيمة ثابتة:

عوامل المساواة:

  • eqاختبار ما إذا كان الحقل يساوي قيمة ثابتة:
  • neاختبار ما إذا كان الحقل لا يساوي قيمة ثابتة:

مشغلي الميدان:

  • gtاختبار ما إذا كان الحقل أكبر من قيمة ثابتة:
  • ltاختبار ما إذا كان الحقل أقل من قيمة ثابتة:
  • geاختبار ما إذا كان الحقل أكبر من قيمة ثابتة أو مساويا لها:
  • leاختبار ما إذا كان الحقل أقل من قيمة ثابتة أو مساويا لها:

يمكنك استخدام عوامل تشغيل النطاق مع عوامل التشغيل المنطقية لاختبار ما إذا كان الحقل ضمن نطاق معين من القيم. راجع الأمثلة لاحقا في هذه المقالة.

ملاحظة

إذا كنت تفضل ذلك، يمكنك وضع القيمة الثابتة على الجانب الأيسر من المشغل واسم الحقل على الجانب الأيمن. بالنسبة لمشغلي النطاق ، يتم عكس معنى المقارنة. على سبيل المثال، إذا كانت القيمة الثابتة على اليسار، gt فستختبر ما إذا كانت القيمة الثابتة أكبر من الحقل. يمكنك أيضا استخدام عوامل تشغيل المقارنة لمقارنة نتيجة دالة، مثل geo.distance، مع قيمة. بالنسبة للوظائف المنطقية مثل search.ismatch، مقارنة النتيجة ب true أو false اختيارية.

بناء الجملة

يعرف EBNF (نموذج Backus-Naur الموسعة) التالي قواعد تعبير OData الذي يستخدم عوامل تشغيل المقارنة.

comparison_expression ::=
    variable_or_function comparison_operator constant |
    constant comparison_operator variable_or_function

variable_or_function ::= variable | function_call

comparison_operator ::= 'gt' | 'lt' | 'ge' | 'le' | 'eq' | 'ne'

يتوفر أيضا رسم تخطيطي تفاعلي لبناء الجملة:

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

أنواع البيانات للمقارنات

يجب أن تكون أنواع البيانات على جانبي عامل تشغيل المقارنة متوافقة. على سبيل المثال ، إذا كان الجانب الأيسر عبارة عن حقل من النوع Edm.DateTimeOffset، فيجب أن يكون الجانب الأيمن ثابتا للتاريخ والوقت. أنواع البيانات الرقمية أكثر مرونة. يمكنك مقارنة المتغيرات والدالات من أي نوع رقمي مع الثوابت من أي نوع رقمي آخر، مع بعض القيود، كما هو موضح في الجدول التالي.

نوع المتغير أو الدالة نوع القيمة الثابتة التقييدات
Edm.Double Edm.Double تخضع المقارنة لقواعد خاصة ل NaN
Edm.Double Edm.Int64 يتم تحويل الثابت إلى ، مما يؤدي إلى Edm.Doubleفقدان الدقة للقيم ذات الحجم الكبير
Edm.Double Edm.Int32 غير متوفر
Edm.Int64 Edm.Double المقارنات مع NaN، -INFأو INF غير مسموح بها
Edm.Int64 Edm.Int64 غير متوفر
Edm.Int64 Edm.Int32 يتم تحويل الثابت إلى قبل المقارنة Edm.Int64
Edm.Int32 Edm.Double المقارنات مع NaN، -INFأو INF غير مسموح بها
Edm.Int32 Edm.Int64 غير متوفر
Edm.Int32 Edm.Int32 غير متوفر

بالنسبة للمقارنات غير المسموح بها، مثل مقارنة حقل نوع Edm.Int64 ب NaN، سترجع واجهة برمجة تطبيقات REST للبحث المعرفي في Azure خطأ "HTTP 400: طلب غير صحيح".

هام

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

حالات خاصة ل null و NaN

عند استخدام عوامل تشغيل المقارنة، من المهم أن تتذكر أن جميع الحقول غير المتعلقة بالمجموعات في Azure Cognitive Search يمكن أن تكون null. يوضح الجدول التالي جميع النتائج المحتملة لتعبير المقارنة حيث يمكن لأي من الجانبين أن يكون null:

عامل تشغيل النتيجة عندما يكون الحقل أو المتغير فقط null النتيجة عندما يكون الثابت فقط هو null النتيجة عندما يكون كل من الحقل أو المتغير والثابت null
gt false HTTP 400: خطأ في طلب غير صحيح HTTP 400: خطأ في طلب غير صحيح
lt false HTTP 400: خطأ في طلب غير صحيح HTTP 400: خطأ في طلب غير صحيح
ge false HTTP 400: خطأ في طلب غير صحيح HTTP 400: خطأ في طلب غير صحيح
le false HTTP 400: خطأ في طلب غير صحيح HTTP 400: خطأ في طلب غير صحيح
eq false false true
ne true true false

باختصار ، يساوي فقط لنفسه ، null وليس أقل أو أكبر من أي قيمة أخرى.

إذا كان فهرسك يحتوي على حقول من النوع Edm.Double وقمت بتحميل NaN قيم إلى تلك الحقول، فستحتاج إلى حساب ذلك عند كتابة عوامل التصفية. يقوم Azure Cognitive Search بتنفيذ معيار IEEE 754 للتعامل NaN مع القيم، وتؤدي المقارنات مع هذه القيم إلى نتائج غير واضحة، كما هو موضح في الجدول التالي.

عامل تشغيل النتيجة عندما يكون معامل واحد على الأقل NaN
gt false
lt false
ge false
le false
eq false
ne true

باختصار ، لا يساوي أي قيمة ، NaN بما في ذلك نفسه.

مقارنة البيانات الجغرافية المكانية

لا يمكنك مقارنة حقل نوع Edm.GeographyPoint بقيمة ثابتة مباشرة، ولكن يمكنك استخدام الدالة geo.distance . ترجع هذه الدالة قيمة من النوع Edm.Double، بحيث يمكنك مقارنتها بثابت رقمي للتصفية استنادا إلى المسافة من الإحداثيات الجغرافية المكانية الثابتة. انظر الأمثلة أدناه.

مقارنة بيانات السلسلة

يمكن مقارنة السلاسل في المرشحات للتطابقات الدقيقة eq باستخدام المشغلين والمشغلين ne . هذه المقارنات حساسة لحالة الأحرف.

أمثلة

مطابقة المستندات التي يتراوح فيها الحقل Rating بين 3 و5، بما في ذلك:

Rating ge 3 and Rating le 5

مطابقة المستندات التي يكون فيها الحقل Location على بعد أقل من 2 كيلومتر من خطي الطول والعرض المحددين:

geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0

مطابقة المستندات التي يكون فيها الحقل أكبر من أو يساوي 1 يناير 2015، منتصف الليل بالتوقيت العالمي المنسق LastRenovationDate :

LastRenovationDate ge 2015-01-01T00:00:00.000Z

مطابقة المستندات التي لا nullيكون فيها الحقلDetails/Sku:

Details/Sku ne null

مطابقة المستندات للفنادق التي تحتوي فيها غرفة واحدة على الأقل على نوع "غرفة ديلوكس"، حيث تتطابق سلسلة الحقل Rooms/Type مع الفلتر تماما:

Rooms/any(room: room/Type eq 'Deluxe Room')

الخطوات التالية