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

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

هذه المقالة هي مرجع بناء جملة الاستعلام لموزع الاستعلام البسيط.

ينطبق بناء جملة الاستعلام لكلا المحلليين على تعبيرات الاستعلام التي تم تمريرها في search معلمة طلب استعلام، لا يجب الخلط بينها وبين بناء جملة OData، مع بناء الجملة الخاص به وقواعد filter و orderby التعبيرات في نفس الطلب.

على الرغم من أن المحلل البسيط يستند إلى فئة Apache Lucene Simple Query Parser ، فإن تنفيذه في Azure الذكاء الاصطناعي Search يستبعد البحث الغامض. إذا كنت بحاجة إلى بحث غامض، ففكر في بناء جملة استعلام 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).

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

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

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

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

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

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

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

بقدر ما يبدو هذا واضحا، هناك جانب واحد من تنفيذ الاستعلام في Azure الذكاء الاصطناعي 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 العملية بإرجاع التطابقات على المستندات التي تستبعد المصطلح.

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

searchMode=any يزيد من استدعاء الاستعلامات عن طريق تضمين المزيد من النتائج، وسيتم تفسيره افتراضيا - على أنه "OR NOT". على سبيل المثال، pool - ocean سيطابق المستندات التي تحتوي على المصطلح pool أو تلك التي لا تحتوي على المصطلح ocean.

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

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

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

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

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

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

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

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

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

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

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

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

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

إشعار

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

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

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

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

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

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

إذا كنت بحاجة إلى تمثيل حرف خاص، يمكنك تعيين محلل يحافظ عليها:

  • يعتبر محلل المسافة البيضاء أي تسلسل أحرف مفصول بمسافات بيضاء كرموز مميزة (لذلك سيتم اعتبار رمز المشاعر '❤' رمزا مميزا).

  • سيتخذ محلل اللغة، مثل محلل اللغة الإنجليزية من Microsoft (en.microsoft)، السلسلة '$' أو '€' كرمز مميز.

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

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

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

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

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

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

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

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

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

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

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

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

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