OData $orderby بناء الجملة في Azure Cognitive Search
يمكنك استخدام معلمة OData $orderby لتطبيق ترتيب فرز مخصص لنتائج البحث في Azure Cognitive Search. توضح هذه المقالة بناء جملة $orderby بالتفصيل. لمزيد من المعلومات العامة حول كيفية استخدام $orderby عند عرض نتائج البحث، راجع كيفية استخدام نتائج البحث في Azure Cognitive Search.
بناء الجملة
تقبل معلمة $orderby قائمة مفصولة بفواصل تضم ما يصل إلى 32 جملة مرتبة حسب الترتيب. يتم وصف بناء جملة ترتيب حسب الترتيب بواسطة EBNF التالي (نموذج Backus-Naur الموسع):
order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?
sortable_function ::= geo_distance_call | 'search.score()'
يتوفر أيضا رسم تخطيطي تفاعلي لبناء الجملة:
ملاحظة
راجع مرجع بناء جملة تعبير OData للبحث المعرفي Azure للحصول على EBNF الكامل.
تحتوي كل جملة على معايير فرز ، متبوعة اختياريا باتجاه فرز ( للتصاعدي أو desc التنازليasc). إذا لم تحدد اتجاها، فسيكون الإعداد الافتراضي تصاعديا. إذا كانت هناك قيم فارغة في الحقل، فستظهر القيم الخالية أولا إذا كان الفرز والأخير asc إذا كان الفرز .desc
يمكن أن تكون معايير الفرز إما مسار sortable حقل أو استدعاء إما إلى الدالات أو الدالات geo.distancesearch.score .
إذا كان لمستندات متعددة نفس معايير الفرز ولم يتم استخدام الدالة search.score (على سبيل المثال، إذا قمت بالفرز حسب حقل رقمي وكانت جميع المستندات الثلاثة لها تصنيف 4)، قطع الروابط حسب درجة المستند بترتيب تنازلي Rating . عندما تكون درجات المستند هي نفسها (على سبيل المثال، عندما لا يكون هناك استعلام بحث عن النص الكامل محدد في الطلب)، فإن الترتيب النسبي للمستندات المرتبطة يكون غير محدد.
يمكنك تحديد معايير فرز متعددة. يحدد ترتيب التعبيرات ترتيب الفرز النهائي. على سبيل المثال ، للفرز تنازليا حسب النتيجة ، متبوعا بالتقييم ، سيكون $orderby=search.score() desc,Rating descبناء الجملة .
بناء الجملة ل geo.distance في $orderby هو نفسه كما هو في $filter. عند استخدامه geo.distance في $orderby ، يجب أن يكون الحقل الذي ينطبق عليه من النوع Edm.GeographyPoint ويجب أن يكون sortableأيضا .
بناء الجملة في search.score$orderby هو search.score(). لا تأخذ الوظيفة search.score أي معلمات.
أمثلة
فرز الفنادق تصاعديا حسب السعر الأساسي:
$orderby=BaseRate asc
فرز الفنادق تنازليا حسب التصنيف، ثم تصاعديا حسب السعر الأساسي (تذكر أن التصاعدي هو الافتراضي):
$orderby=Rating desc,BaseRate
فرز الفنادق تنازليا حسب التصنيف، ثم صعودا حسب المسافة من الإحداثيات المحددة:
$orderby=Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc
فرز الفنادق بترتيب تنازلي حسب search.score والتصنيف، ثم بترتيب تصاعدي حسب المسافة من الإحداثيات المحددة. بين فندقين لهما درجات وتقييمات متطابقة في الملاءمة ، يتم سرد أقرب فندق أولا:
$orderby=search.score() desc,Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc