عوامل التصفية في البحث المعرفي Azure

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

يتم تحديد عوامل التصفية في حقول فردية. يجب أن يعزى تعريف الحقل إلى "قابل للتصفية" إذا كنت تريد استخدامه في تعبيرات التصفية.

متى تستخدم فلتر

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

تتضمن السيناريوهات الشائعة ما يلي:

  • قم بتقطيع نتائج البحث استنادا إلى المحتوى الموجود في الفهرس. بالنظر إلى مخطط يحتوي على موقع الفندق وفئاته ووسائل الراحة ، يمكنك إنشاء فلتر لمطابقة المعايير بشكل صريح (في سياتل ، على الماء ، مع إطلالة).

  • يأتي تنفيذ تجربة بحث مع تبعية الفلتر:

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

كيفية تنفيذ الفلاتر

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

تتم التصفية جنبا إلى جنب مع البحث، مما يؤهل المستندات التي يجب تضمينها في المعالجة النهائية لاسترجاع المستندات وتسجيل نقاط الصلة. عند إقرانه بسلسلة بحث، يقلل عامل التصفية بشكل فعال من مجموعة الاستدعاء لعملية البحث اللاحقة. عند استخدامها بمفردها (على سبيل المثال ، عندما تكون سلسلة الاستعلام فارغة حيث search=*) ، تكون معايير المرشح هي الإدخال الوحيد.

تعريف الفلاتر

عوامل التصفية هي تعبيرات OData ، مفصلية في بناء جملة المرشح المدعوم من البحث المعرفي.

يمكنك تحديد عامل تصفية واحد لكل عملية بحث ، ولكن يمكن أن يتضمن عامل التصفية نفسه حقولا متعددة، ومعايير متعددة، وإذا كنت تستخدم دالة ismatch ، فستحتاج إلى تعبيرات بحث متعددة في النص الكامل. في تعبير عامل تصفية متعدد الأجزاء، يمكنك تحديد الافتراضات بأي ترتيب (وفقا لقواعد أسبقية المشغل). لا يوجد مكسب ملموس في الأداء إذا حاولت إعادة ترتيب الافتراضات في تسلسل معين.

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

تمثل الأمثلة التالية تعريفات عامل تصفية نموذجية في العديد من واجهات برمجة التطبيقات.

POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2020-06-30
{
    "search": "*",
    "filter": "Rooms/any(room: room/BaseRate lt 150.0)",
    "select": "HotelId, HotelName, Rooms/Description, Rooms/BaseRate"
}
    parameters =
        new SearchParameters()
        {
            Filter = "Rooms/any(room: room/BaseRate lt 150.0)",
            Select = new[] { "HotelId", "HotelName", "Rooms/Description" ,"Rooms/BaseRate"}
        };

    var results = searchIndexClient.Documents.Search("*", parameters);

أنماط التصفية

توضح الأمثلة التالية العديد من أنماط الاستخدام لسيناريوهات عامل التصفية. لمزيد من الأفكار، راجع أمثلة بناء جملة > تعبير OData.

  • مستقل $filter، بدون سلسلة استعلام، مفيدة عندما يكون تعبير عامل التصفية قادرا على تأهيل المستندات ذات الأهمية بالكامل. بدون سلسلة استعلام ، لا يوجد تحليل معجمي أو لغوي ، ولا تسجيل ، ولا ترتيب. لاحظ أن سلسلة البحث هي مجرد علامة نجمية ، مما يعني "مطابقة جميع المستندات".

    {
      "search": "*",
      "filter": "Rooms/any(room: room/BaseRate ge 60 and room/BaseRate lt 300) and Address/City eq 'Honolulu"
    }
    
  • مزيج من سلسلة الاستعلام $filter، حيث يقوم عامل التصفية بإنشاء المجموعة الفرعية، وتوفر سلسلة الاستعلام مدخلات المصطلح للبحث عن النص الكامل عبر المجموعة الفرعية التي تمت تصفيتها. تؤدي إضافة المصطلحات (مسارح المسافات البعيدة) إلى تقديم درجات البحث في النتائج ، حيث يتم ترتيب المستندات التي تتطابق بشكل أفضل مع المصطلحات في مرتبة أعلى. يعد استخدام عامل تصفية مع سلسلة استعلام هو نمط الاستخدام الأكثر شيوعا.

    {
      "search": "walking distance theaters",
      "filter": "Rooms/any(room: room/BaseRate ge 60 and room/BaseRate lt 300) and Address/City eq 'Seattle'"
    }
    
    
  • الاستعلامات المركبة، مفصولة ب أو، لكل منها معايير تصفية خاصة بها (على سبيل المثال، بيغلز في أو سياميز في قطة). يتم تقييم التعبيرات جنبا إلى جنب مع or بشكل فردي ، مع اتحاد المستندات المطابقة لكل تعبير يتم إرساله في الرد. يتم تحقيق نمط الاستخدام هذا من خلال الوظيفة search.ismatchscoring . يمكنك أيضا استخدام الإصدار غير المسجل، search.ismatch.

    # Match on hostels rated higher than 4 OR 5-star motels.
    $filter=search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5
    
    # Match on 'luxury' or 'high-end' in the description field OR on category exactly equal to 'Luxury'.
    $filter=search.ismatchscoring('luxury | high-end', 'Description') or Category eq 'Luxury'&$count=true
    

    من الممكن أيضا الجمع بين البحث عن النص الكامل عبر search.ismatchscoring الفلاتر باستخدام and بدلا من or، ولكن هذا يعادل وظيفيا استخدام المعلمات search والمعلمات $filter في طلب البحث. على سبيل المثال، ينتج عن الاستعلامتين التاليتين نفس النتيجة:

    $filter=search.ismatchscoring('pool') and Rating ge 4
    
    search=pool&$filter=Rating ge 4
    

المتطلبات الميدانية للتصفية

في واجهة برمجة تطبيقات REST، يتم تشغيل التصفية بشكل افتراضي للحقول البسيطة. الحقول القابلة للتصفية تزيد من حجم الفهرس. تأكد من تعيين "filterable": false الحقول التي لا تخطط لاستخدامها فعليا في عامل تصفية. لمزيد من المعلومات حول إعدادات تعريفات الحقول، راجع إنشاء فهرس.

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

[IsFilterable, IsSortable, IsFacetable]
public double? BaseRate { get; set; }

جعل حقل موجود قابلا للتصفية

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

أساسيات تصفية النص

تطابق عوامل تصفية النص حقول السلسلة مع السلاسل الحرفية التي توفرها في عامل التصفية: $filter=Category eq 'Resort and Spa'

على عكس البحث في النص الكامل ، لا يوجد تحليل معجمي أو كسر الكلمات لمرشحات النص ، لذلك تكون المقارنات للمطابقة التامة فقط. على سبيل المثال ، افترض أن الحقل f يحتوي على "يوم مشمس" ، لا يتطابق ، $filter=f eq 'Sunny' ولكنه $filter=f eq 'sunny day' سوف.

السلاسل النصية حساسة لحالة الأحرف. لا يوجد غلاف منخفض من الكلمات ذات الأحرف الكبيرة: $filter=f eq 'Sunny day' لن تجد "يوم مشمس".

نهج التصفية على النص

النهج الوصف متى تستخدم
search.in دالة تطابق حقلا مع قائمة محددة من السلاسل. يوصى به لعوامل تصفية الأمان ولأي عوامل تصفية تحتاج إلى مطابقة العديد من القيم النصية الخام مع حقل سلسلة. تم تصميم وظيفة search.in للسرعة وهي أسرع بكثير من مقارنة الحقل صراحة مع كل سلسلة باستخدام eq و or.
search.ismatch وظيفة تسمح لك بمزج عمليات البحث عن النص الكامل مع عمليات التصفية المنطقية الصارمة في نفس تعبير عامل التصفية. استخدم search.ismatch (أو ما يعادله من النقاط، search.ismatchscoring) عندما تريد مجموعات متعددة من فلتر البحث في طلب واحد. يمكنك أيضا استخدامه لمرشح يحتوي على تصفية على سلسلة جزئية داخل سلسلة أكبر.
$filter=field operator string تعبير معرف من قبل المستخدم يتكون من الحقول وعوامل التشغيل والقيم. استخدم هذا عندما تريد العثور على تطابقات دقيقة بين حقل سلسلة وقيمة سلسلة.

أساسيات المرشح الرقمي

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

توفر المستندات التي تحتوي على حقول رقمية (السعر والحجم ورمز SKU والمعرف) هذه القيم في نتائج البحث إذا تم وضع علامة retrievableعلى الحقل . النقطة المهمة هنا هي أن البحث عن النص الكامل نفسه لا ينطبق على أنواع الحقول الرقمية.

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

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

# Geo-filter returning documents within 5 kilometers of Redmond, Washington state
# Use $count=true to get a number of hits returned by the query
# Use $select to trim results, showing values for named fields only
# Use search=* for an empty query string. The filter is the sole input

search=*&$count=true&$select=description,city,postCode&$filter=geo.distance(location,geography'POINT(-122.121513 47.673988)') le 5

# Numeric filters use comparison like greater than (gt), less than (lt), not equal (ne)
# Include "and" to filter on multiple fields (baths and bed)
# Full text search is on John Leclerc, matching on John or Leclerc

search=John Leclerc&$count=true&$select=source,city,postCode,baths,beds&$filter=baths gt 3 and beds gt 4

# Text filters can also use comparison operators
# Wrap text in single or double quotes and use the correct case
# Full text search is on John Leclerc, matching on John or Leclerc

search=John Leclerc&$count=true&$select=source,city,postCode,baths,beds&$filter=city gt 'Seattle'

للعمل مع المزيد من الأمثلة، راجع أمثلة بناء جملة > تعبير عامل تصفية OData.

راجع أيضًا