بناء جملة الاستعلام البسيط في Azure Cognitive Search

يقوم Azure Cognitive Search بتنفيذ لغتي استعلام مستندتين إلى Lucene: محلل الاستعلام البسيط ومحلل استعلامLucene. المحلل البسيط أكثر مرونة وسيحاول تفسير الطلب حتى لو لم يكن مؤلفا بشكل مثالي. نظرا لأنه مرن، فهو الإعداد الافتراضي للاستعلامات في البحث المعرفي في Azure.

يتم استخدام بناء الجملة البسيط لتعبيرات الاستعلام التي تم تمريرها في معلمة "البحث" لطلب " مستندات البحث" (REST API) ، ولا ينبغي الخلط بينه وبين بناء جملة OData المستخدم لتعبيرات " $filter " و " $orderby" في نفس الطلب. تحتوي معلمات OData على بناء جملة وقواعد مختلفة لإنشاء الاستعلامات والهروب من السلاسل وما إلى ذلك.

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

مثال (بناء جملة بسيط)

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

POST https://{{service-name}}.search.windows.net/indexes/hotel-rooms-sample/docs/search?api-version=2020-06-30
{
  "queryType": "simple",
  "search": "budget hotel +pool",
  "searchMode": "all"
}

المعلمة "searchMode" ذات صلة في هذا المثال. عندما تكون عوامل التشغيل المنطقية في الاستعلام ، يجب عليك تعيينها "searchMode=all" بشكل عام لضمان مطابقة جميع المعايير. خلاف ذلك ، يمكنك استخدام الإعداد الافتراضي "searchMode=any" الذي يفضل الاستدعاء على الدقة.

للحصول على أمثلة إضافية، راجع أمثلة بناء جملة الاستعلام البسيط. للحصول على تفاصيل حول طلب الاستعلام والمعلمات، راجع البحث في المستندات (REST API).

البحث عن الكلمات الرئيسية حول المصطلحات والعبارات

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

  • البحث عن المصطلحات هو استعلام عن مصطلح واحد أو أكثر، حيث يعتبر أي من المصطلحات مطابقا.

  • البحث عن العبارة عبارة عبارة دقيقة محاطة بعلامات " "اقتباس . على سبيل المثال، في حين Roach Motel أن (بدون علامات اقتباس) تبحث عن المستندات التي تحتوي على و/أو Motel في أي مكان بأي ترتيب، "Roach Motel" فإن (مع علامات الاقتباس) لن تتطابق إلا مع المستندات التي تحتوي على Roach تلك العبارة بأكملها معا وبهذا الترتيب (لا يزال التحليل المعجمي ساريا).

    بناء على عميل البحث، قد تحتاج إلى الهروب من علامتي الاقتباس في بحث العبارة. على سبيل المثال ، في ساعي البريد في طلب POST ، سيتم تحديد عبارة البحث في نص الطلب على "Roach Motel" أنها "\"Roach Motel\"".

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

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

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

عوامل منطقية

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

حرف مثال الاستخدام
+ pool + ocean عملية AND. على سبيل المثال، pool + ocean ينص على أن المستند يجب أن يحتوي على كلا المصطلحين.
| pool | ocean تعثر عملية OR على تطابق عند العثور على أي من المصطلحين. في المثال، سيقوم محرك الاستعلام بإرجاع المطابقة على المستندات التي تحتوي على أي منهما pool أو ocean كليهما. نظرا لأن OR هو عامل تشغيل الاقتران الافتراضي ، يمكنك أيضا تركه ، بحيث pool ocean يكون مكافئا ل pool | ocean.
- pool – ocean ترجع عملية NOT تطابقات على المستندات التي تستبعد المصطلح.

للحصول على السلوك المتوقع على تعبير NOT، قم بتعيينه "searchMode=all" على الطلب. خلاف ذلك ، تحت الإعداد الافتراضي "searchMode=any"، ستحصل على تطابقات على pool، بالإضافة إلى مطابقات على جميع المستندات التي لا تحتوي على ocean، والتي قد تكون الكثير من المستندات. تتحكم المعلمة "searchMode" في طلب استعلام فيما إذا كان المصطلح الذي يحتوي على عامل التشغيل NOT هو ANDed أو ORed مع مصطلحات أخرى في الاستعلام (على افتراض عدم وجود + أو | عامل تشغيل بالشروط الأخرى). يزيد الاستخدام "searchMode=all" من دقة الاستعلامات من خلال تضمين نتائج أقل ، وبشكل افتراضي - سيتم تفسيره على أنه "AND NOT".

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

استعلامات البادئة

بالنسبة إلى الاستعلامات "يبدأ ب"، أضف عامل تشغيل لاحقة (*) كعنصر نائب لبقية المدة. يجب أن يبدأ استعلام البادئة بحرف أبجدي رقمي واحد على الأقل قبل أن تتمكن من إضافة عامل تشغيل اللاحقة.

حرف مثال الاستخدام
* lingui* سوف تتطابق على "اللغوية" أو "linguini" تمثل العلامة النجمية (*) حرفا واحدا أو أكثر من الأحرف ذات الطول التعسفي ، متجاهلة الحالة.

على غرار الفلاتر، يبحث استعلام البادئة عن تطابق تام. على هذا النحو ، لا توجد درجة صلة (تتلقى جميع النتائج درجة بحث تبلغ 1.0). كن على علم بأن استعلامات البادئة يمكن أن تكون بطيئة ، خاصة إذا كان الفهرس كبيرا وتتكون البادئة من عدد صغير من الأحرف. قد تعمل منهجية بديلة ، مثل ترميز edge n-gram ، بشكل أسرع. لا يمكن أن تكون المصطلحات التي تستخدم البحث عن البادئة أطول من 1000 حرف.

بناء جملة بسيط يدعم مطابقة البادئة فقط. لمطابقة اللاحقة أو infix مع نهاية المصطلح أو منتصفه، استخدم بناء جملة Lucene الكامل للبحث عن أحرف البدل.

الهروب من عوامل تشغيل البحث

في بناء الجملة البسيط، تتضمن عوامل تشغيل البحث هذه الأحرف: + | " ( ) ' \

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

لجعل الأمور بسيطة للحالات الأكثر نموذجية ، هناك استثناءان لهذه القاعدة حيث لا تكون هناك حاجة إلى الهروب:

  • يجب الهروب من عامل التشغيل - NOT فقط إذا كان الحرف الأول بعد مسافة بيضاء. إذا ظهر - في الوسط (على سبيل المثال ، في 3352CDD0-EF30-4A2E-A512-3B30AF40F3FD) ، يمكنك تخطي الهروب.

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

ملاحظة

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

ترميز الأحرف غير الآمنة والمحجوزة في عناوين URL

تأكد من ترميز جميع الأحرف غير الآمنة والمحجوزة في عنوان URL. على سبيل المثال، "#" هو حرف غير آمن لأنه معرف جزء/مرساة في عنوان URL. يجب ترميز الحرف إذا %23 تم استخدامه في عنوان URL. "" و "&=" هما مثالان على الأحرف المحجوزة لأنها تحدد المعلمات وتحدد القيم في Azure Cognitive Search. لمزيد من المعلومات، راجع RFC1738: محددات مواقع الموارد الموحدة (URL).

الأحرف غير الآمنة هي " ` < > # % { } | \ ^ ~ [ ]. الأحرف المحجوزة هي ; / ? : @ = + &.

الأحرف الخاصة

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

تتضمن أجهزة التحليل التي ستقوم بترميز الأحرف الخاصة محلل "المسافة البيضاء" ، والذي يأخذ في الاعتبار أي تسلسلات أحرف مفصولة بمسافات بيضاء كرموز مميزة (لذلك سيتم اعتبار السلسلة "" ❤ رمزا مميزا). أيضا ، محلل اللغة مثل محلل اللغة الإنجليزية من Microsoft ("en.microsoft") ، سيأخذ سلسلة "€" كرمز مميز. يمكنك اختبار محلل لمعرفة الرموز المميزة التي ينشئها لاستعلام معين.

عند استخدام أحرف Unicode ، تأكد من هروب الرموز بشكل صحيح في عنوان URL للاستعلام (على سبيل المثال ، ستستخدم "" ❤ تسلسل %E2%9D%A4+الهروب ). ساعي البريد يقوم بهذه الترجمة تلقائيا.

الأسبقية (التجميع)

يمكنك استخدام الأقواس لإنشاء استعلامات فرعية، بما في ذلك عوامل التشغيل داخل العبارة بين قوسين. على سبيل المثال ، motel+(wifi|luxury) سيتم البحث عن المستندات التي تحتوي على مصطلح "الموتيل" وإما "wifi" أو "الرفاهية" (أو كليهما).

حدود حجم الاستعلام

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

  • بالنسبة إلى GET، لا يمكن أن يتجاوز طول عنوان URL 8 كيلوبايت.

  • بالنسبة ل POST (وأي طلب آخر) ، حيث يتضمن search نص الطلب معلمات أخرى مثل filter و orderby، الحد الأقصى للحجم هو 16 ميغابايت. تشمل الحدود الإضافية ما يلي:

    • الحد الأقصى لطول عبارة البحث هو 100000 حرف.
    • الحد الأقصى لعدد الجمل في search (التعبيرات المفصولة ب AND أو OR) هو 1024.
    • الحد الأقصى لحجم مصطلح البحث هو 1000 حرف للبحث عن البادئة.
    • هناك أيضا حد يبلغ حوالي 32 كيلوبايت على حجم أي مصطلح فردي في استعلام.

لمزيد من المعلومات حول حدود الاستعلام، راجع حدود طلب واجهة برمجة التطبيقات.

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

إذا كنت ستقوم بإنشاء استعلامات برمجيا، فراجع البحث عن النص الكامل في Azure Cognitive Search لفهم مراحل معالجة الاستعلام والآثار المترتبة على تحليل النص.

يمكنك أيضا مراجعة المقالات التالية لمعرفة المزيد حول إنشاء الاستعلام: