كيفية العمل مع نتائج البحث في البحث المعرفي في Azure

توضح هذه المقالة كيفية العمل مع استجابة استعلام في Azure Cognitive Search.

يتم تحديد بنية الاستجابة بواسطة المعلمات الموجودة في الاستعلام نفسه، كما هو موضح في مستندات البحث (REST) أو فئة نتائج البحث (Azure for .NET). تحدد المعلمات الموجودة في الاستعلام:

  • عدد النتائج في الاستجابة (حتى 50، بشكل افتراضي)
  • الحقول في كل نتيجة
  • ترتيب العناصر في النتائج
  • تسليط الضوء على المصطلحات داخل النتيجة ، والمطابقة إما على المدى الكلي أو الجزئي في نص النتيجة

تكوين النتائج

على الرغم من أن مستند البحث قد يتكون من عدد كبير من الحقول، إلا أنه عادة ما تكون هناك حاجة إلى عدد قليل فقط لتمثيل كل مستند في مجموعة النتائج. في طلب استعلام، قم بالإلحاق $select=<field list> لتحديد الحقول التي تظهر في الاستجابة. يجب أن يعزى الحقل إلى أنه قابل للاسترداد في الفهرس ليتم تضمينه في النتيجة.

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

POST /indexes/hotels-sample-index/docs/search?api-version=2020-06-30 
    {  
      "search": "sandy beaches",
      "select": "HotelId, HotelName, Description, Rating, Address/City"
      "count": true
    }

ملاحظة

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

تلميحات للحصول على نتائج غير متوقعة

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

  • قم بالتغيير searchMode=any (افتراضي) لطلب searchMode=all مطابقة جميع المعايير بدلا من أي من المعايير. هذا صحيح بشكل خاص عندما يتم تضمين عوامل التشغيل المنطقية في الاستعلام.

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

نتائج الترحيل

بشكل افتراضي ، يعرض محرك البحث ما يصل إلى أول 50 مباراة. يتم تحديد أعلى 50 حسب درجة البحث، على افتراض أن الاستعلام هو بحث النص الكامل أو البحث الدلالي، أو بترتيب تعسفي لاستعلامات المطابقة التامة (حيث "@searchScore=1.0").

للتحكم في ترحيل جميع المستندات التي تم إرجاعها في مجموعة نتائج، أضف $top معلمات $skip إلى طلب الاستعلام. توضح القائمة التالية المنطق.

  • إضافة $count=true للحصول على عدد إجمالي عدد المستندات المطابقة الموجودة داخل فهرس. استنادا إلى الاستعلام ومحتوى مستنداتك، قد يكون العدد مرتفعا مثل كل مستند في الفهرس.

  • إرجاع المجموعة الأولى المكونة من 15 مستندا مطابقا بالإضافة إلى عدد إجمالي التطابقات: GET /indexes/<INDEX-NAME>/docs?search=<QUERY STRING>&$top=15&$skip=0&$count=true

  • أعد المجموعة الثانية ، وتخطي أول 15 للحصول على ال 15 التالية: $top=15&$skip=15. كرر للمجموعة الثالثة من 15: $top=15&$skip=30

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

فيما يلي مثال على كيفية الحصول على تكرارات. افترض فهرسا يحتوي على أربع مستندات:

{ "id": "1", "rating": 5 }
{ "id": "2", "rating": 3 }
{ "id": "3", "rating": 2 }
{ "id": "4", "rating": 1 }

افترض الآن أنك تريد إرجاع النتائج مرتين في كل مرة ، مرتبة حسب التصنيف. يمكنك تنفيذ هذا الاستعلام للحصول على الصفحة الأولى من النتائج: ، مما ينتج عنه النتائج التالية: $top=2&$skip=0&$orderby=rating desc

{ "id": "1", "rating": 5 }
{ "id": "2", "rating": 3 }

على الخدمة، افترض إضافة مستند خامس إلى الفهرس بين استدعاءات الاستعلام: { "id": "5", "rating": 4 }. بعد ذلك بوقت قصير، يمكنك تنفيذ استعلام لجلب الصفحة الثانية: ، والحصول على هذه النتائج: $top=2&$skip=2&$orderby=rating desc

{ "id": "2", "rating": 3 }
{ "id": "3", "rating": 2 }

لاحظ أنه يتم جلب المستند 2 مرتين. وذلك لأن المستند الجديد 5 له قيمة أكبر للتصنيف، لذلك يتم فرزه قبل المستند 2 ويهبط على الصفحة الأولى. على الرغم من أن هذا السلوك قد يكون غير متوقع ، إلا أنه نموذجي لكيفية تصرف محرك البحث.

ترتيب النتائج

في استعلام البحث عن النص الكامل، يمكن ترتيب النتائج حسب درجة بحث أو درجة إعادة ترتيب دلالية (إذا كنت تستخدم البحث الدلالي) أو حسب تعبير $orderby في طلب الاستعلام.

@search.score يشير التساوي 1.00 إلى مجموعة نتائج غير مسجلة أو غير مرتبة ، حيث تكون النتيجة 1.0 موحدة في جميع النتائج. تحدث النتائج غير المسجلة عندما يكون نموذج الاستعلام عبارة عن بحث غامض أو استعلامات أحرف بدل أو regex أو بحث فارغ (search=*). إذا كنت بحاجة إلى فرض هيكل ترتيب على النتائج غير المسجلة ، $orderby فسيساعدك التعبير على تحقيق هذا الهدف.

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

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

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

كيفية الحصول على طلب متسق

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

تتضمن الحقول الشائعة الاستخدام في $orderby التصنيف والتاريخ والموقع. تتطلب التصفية حسب الموقع أن يستدعي تعبير عامل التصفية الدالةgeo.distance()، بالإضافة إلى اسم الحقل.

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

اضغط على تمييز

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

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

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

متطلبات تسليط الضوء على النتائج

  • يجب أن تكون الحقول Edm.String أو Collection (Edm.String)
  • يجب أن تنسب الحقول في مكان قابل للبحث

تحديد التمييز في الطلب

لإرجاع المصطلحات المميزة، قم بتضمين معلمة "التمييز" في طلب الاستعلام. يتم تعيين المعلمة إلى قائمة حقول محددة بفواصل.

بشكل افتراضي ، يكون ترميز التنسيق هو <em>، ولكن يمكنك تجاوز العلامة باستخدام highlightPreTag المعلمات والمعلمات highlightPostTag . يعالج رمز العميل الاستجابة (على سبيل المثال، تطبيق خط غامق أو خلفية صفراء).

POST /indexes/good-books/docs/search?api-version=2020-06-30 
    {  
      "search": "divine secrets",  
      "highlight": "title, original_title",
      "highlightPreTag": "<b>",
      "highlightPostTag": "</b>"
    }

بشكل افتراضي، يعرض البحث المعرفي في Azure ما يصل إلى خمس نقاط تمييز لكل حقل. يمكنك ضبط هذا الرقم عن طريق إلحاق شرطة متبوعة بعدد صحيح. على سبيل المثال، "highlight": "description-10" يمكنك عرض ما يصل إلى 10 مصطلحات مميزة حول المحتوى المطابق في حقل "الوصف".

أبرز النتائج

عند إضافة التمييز إلى الاستعلام، تتضمن الاستجابة "@search.highlights " لكل نتيجة بحيث يمكن لرمز التطبيق استهداف هذه البنية. يتم تضمين قائمة الحقول المحددة ل "تمييز" في الاستجابة.

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

Screenshot of highlighting over a phrase query.

تمييز البحث عن الكلمات الرئيسية

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

"@odata.count": 39,
"value": [
    {
        "@search.score": 19.593246,
        "@search.highlights": {
            "original_title": [
                "<em>Divine</em> <em>Secrets</em> of the Ya-Ya Sisterhood"
            ],
            "title": [
                "<em>Divine</em> <em>Secrets</em> of the Ya-Ya Sisterhood"
            ]
        },
        "original_title": "Divine Secrets of the Ya-Ya Sisterhood",
        "title": "Divine Secrets of the Ya-Ya Sisterhood"
    },
    {
        "@search.score": 12.779835,
        "@search.highlights": {
            "original_title": [
                "<em>Divine</em> Madness"
            ],
            "title": [
                "<em>Divine</em> Madness (Cherub, #5)"
            ]
        },
        "original_title": "Divine Madness",
        "title": "Divine Madness (Cherub, #5)"
    },
    {
        "@search.score": 12.62534,
        "@search.highlights": {
            "original_title": [
                "Grave <em>Secrets</em>"
            ],
            "title": [
                "Grave <em>Secrets</em> (Temperance Brennan, #5)"
            ]
        },
        "original_title": "Grave Secrets",
        "title": "Grave Secrets (Temperance Brennan, #5)"
    }

تمييز البحث عن العبارات

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

POST /indexes/good-books/docs/search?api-version=2020-06-30 
    {  
      "search": "\"divine secrets\"",,
      "select": "title,original_title",
      "highlight": "title",
      "highlightPreTag": "<b>",
      "highlightPostTag": "</b>",
      "count": true
    }

نظرا لأن المعايير تحدد الآن كلا المصطلحين، يتم العثور على تطابق واحد فقط في فهرس البحث. تبدو الاستجابة للاستعلام أعلاه كما يلي:

{
    "@odata.count": 1,
    "value": [
        {
            "@search.score": 19.593246,
            "@search.highlights": {
                "title": [
                    "<b>Divine</b> <b>Secrets</b> of the Ya-Ya Sisterhood"
                ]
            },
            "original_title": "Divine Secrets of the Ya-Ya Sisterhood",
            "title": "Divine Secrets of the Ya-Ya Sisterhood"
        }
    ]
}

تسليط الضوء على العبارة على الخدمات القديمة

تنفذ خدمات البحث التي تم إنشاؤها قبل 15 يوليو 2020 تجربة تمييز مختلفة لاستعلامات العبارات.

بالنسبة للأمثلة التالية، افترض سلسلة استعلام تتضمن العبارة المرفقة بعلامات الاقتباس "super bowl". قبل يوليو 2020 ، يتم تمييز أي مصطلح في العبارة:

"@search.highlights": {
    "sentence": [
        "The <em>super</em> <em>bowl</em> is <em>super</em> awesome with a <em>bowl</em> of chips"
   ]

بالنسبة إلى خدمات البحث التي تم إنشاؤها بعد تموز (يوليو) 2020، سيتم عرض العبارات التي تتطابق مع استعلام العبارة بالكامل فقط في "@search.highlights ":

"@search.highlights": {
    "sentence": [
        "The <em>super</em> <em>bowl</em> is super awesome with a bowl of chips"
   ]

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

لإنشاء صفحة بحث لعميلك بسرعة، ضع في اعتبارك الخيارات التالية:

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

  • إنشاء التطبيق الأول الخاص بك في C # هو البرنامج التعليمي ونموذج التعليمات البرمجية التي تبني عميل وظيفي. يوضح نموذج التعليمات البرمجية الاستعلامات المرقمة وتمييز الضربات والفرز.

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