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

عند إنشاء استعلامات في Azure الذكاء الاصطناعي Search، يمكنك اختيار بناء جملة Lucene Query Parser الكامل لنماذج الاستعلام المتخصصة: حرف البدل، والبحث الغامض، والبحث عن التقارب، والتعبيرات العادية. يتم تنفيذ الكثير من بناء جملة Lucene Query Parser سليمة في Azure الذكاء الاصطناعي Search، باستثناء عمليات البحث في النطاق * التي يتم إنشاؤها من خلال $filter التعبيرات.

لاستخدام بناء جملة Lucene الكامل، قم بتعيين queryType إلى full وتمرير تعبير استعلام منمط لحرف البدل أو البحث الغامض أو أحد نماذج الاستعلام الأخرى التي يدعمها بناء الجملة الكامل. في REST، يتم توفير تعبيرات الاستعلام في search معلمة طلب مستندات البحث (REST API ).

مثال (بناء الجملة الكامل)

المثال التالي هو طلب بحث تم إنشاؤه باستخدام بناء الجملة الكامل. يوضح هذا المثال المحدد البحث في الحقل وتعزيز المصطلح. يبحث عن الفنادق التي يحتوي فيها حقل الفئة على المصطلح budget. يتم تصنيف أي مستندات تحتوي على العبارة "recently renovated" أعلى نتيجة لمصطلح قيمة التعزيز (3).

POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
  "queryType": "full",
  "search": "category:budget AND \"recently renovated\"^3",
  "searchMode": "all"
}

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

لمزيد من الأمثلة، راجع أمثلة بناء جملة استعلام Lucene. للحصول على تفاصيل حول طلب الاستعلام والمعلمات، بما في ذلك searchMode، راجع Search Documents (REST API).

أساسيات بناء الجملة

تنطبق أساسيات بناء الجملة التالية على جميع الاستعلامات التي تستخدم بناء جملة Lucene.

تقييم عامل التشغيل في السياق

يحدد الموضع ما إذا كان يتم تفسير الرمز على أنه عامل تشغيل أو مجرد حرف آخر في سلسلة.

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

ضمن مصطلح، مثل business~analyst، لا يتم تقييم الحرف كعامل تشغيل. في هذه الحالة، بافتراض أن الاستعلام عبارة أو استعلام مصطلح، فإن البحث عن النص الكامل مع التحليل المعجمي يجرد ~ وينقسم المصطلح business~analyst إلى اثنين: business OR analyst.

المثال أعلاه هو التلد (~)، ولكن نفس المبدأ ينطبق على كل عامل تشغيل.

الهروب من الأحرف الخاصة

لاستخدام أي من عوامل تشغيل البحث كجزء من نص البحث، قم بإلغاء الحرف ببادئه بسلة مائلة عكسية واحدة (\). على سبيل المثال، للبحث في أحرف البدل على https://، حيث :// هو جزء من سلسلة الاستعلام، يمكنك تحديد search=https\:\/\/*. وبالمثل، قد يبدو نمط رقم الهاتف الهارب مثل هذا \+1 \(800\) 642\-7676.

تتضمن الأحرف الخاصة التي تتطلب الهروب ما يلي:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /

إشعار

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

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

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

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

عوامل التشغيل منطقية

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

عامل تشغيل النص الحرف مثال الاستخدام
و + wifi AND luxury تحديد المصطلحات التي يجب أن تحتوي عليها المطابقة. في المثال، يبحث محرك الاستعلام عن المستندات التي تحتوي على كل من wifi و luxury. يمكن أيضا استخدام حرف الجمع (+) مباشرة أمام مصطلح لجعله مطلوبا. على سبيل المثال، +wifi +luxury ينص على أن كلا النصين يجب أن يظهرا في مكان ما في حقل مستند واحد.
OR (بلا) 1 wifi OR luxury البحث عن تطابق عند العثور على أي من المصطلحين. في المثال، يقوم مشغل الاستعلام بإرجاع المطابقة على المستندات التي تحتوي على إما wifi أو luxury كليهما. نظرا لأن OR هو عامل تشغيل التزامن الافتراضي، يمكنك أيضا تركه خارج، مثل ما wifi luxury يعادل wifi OR luxury.
NOT !, - wifi –luxury إرجاع تطابق على المستندات التي تستبعد المصطلح. على سبيل المثال، wifi –luxury يبحث عن المستندات التي تحتوي على wifi المصطلح ولكن ليس luxury.

1| الحرف غير معتمد لعمليات OR.

عامل التشغيل NOT المنطقي

هام

يعمل عامل التشغيل NOT (NOTأو !-) بشكل مختلف في بناء الجملة الكامل عن سلوكه في بناء الجملة البسيط.

  • في بناء الجملة البسيط، تحتوي الاستعلامات ذات النفي دائما على حرف بدل مضاف تلقائيا. على سبيل المثال، يتم توسيع الاستعلام -luxury تلقائيا إلى -luxury *.
  • في بناء الجملة الكامل، لا يمكن دمج الاستعلامات ذات الرفض مع حرف بدل. على سبيل المثال، الاستعلامات -luxury * غير مسموح بها.
  • في بناء الجملة الكامل، لا يسمح بالاستعلامات ذات الرفض الواحد. على سبيل المثال، الاستعلام -luxury غير مسموح به.
  • في بناء الجملة الكامل، ستتصرف النفيات كما لو كانت دائما ANDed على الاستعلام بغض النظر عن وضع البحث.
    • على سبيل المثال، يقوم استعلام wifi -luxury بناء الجملة الكامل في بناء الجملة الكامل فقط بإحضار المستندات التي تحتوي على المصطلح wifi، ثم يطبق الرفض -luxury على تلك المستندات.
  • إذا كنت تريد استخدام الرفض للبحث في جميع المستندات في الفهرس، يوصى ببناء جملة بسيط مع any وضع البحث.
  • إذا كنت تريد استخدام الرفض للبحث عن مجموعة فرعية من المستندات في الفهرس، يوصى ببناء الجملة الكامل أو بناء الجملة البسيط مع وضع البحث بالكامل.
نوع الاستعلام وضع البحث نموذج استعلام سلوك
بسيط أي wifi -luxury إرجاع كافة المستندات في الفهرس. يتم ترتيب المستندات التي تحمل مصطلح "wifi" أو المستندات المفقودة لمصطلح "الرفاهية" أعلى من المستندات الأخرى. يتم توسيع الاستعلام إلى wifi OR -luxury OR *.
بسيط all wifi -luxury ترجع المستندات الموجودة في الفهرس فقط والتي تحتوي على مصطلح "wifi" ولا تحتوي على مصطلح "الرفاهية". يتم توسيع الاستعلام إلى wifi AND -luxury AND *.
كامل أي wifi -luxury ترجع المستندات الموجودة في الفهرس التي تحتوي على مصطلح "wifi" فقط، ثم تتم إزالة المستندات التي تحتوي على مصطلح "الترف" من النتائج.
كامل all wifi -luxury ترجع المستندات الموجودة في الفهرس التي تحتوي على مصطلح "wifi" فقط، ثم تتم إزالة المستندات التي تحتوي على مصطلح "الترف" من النتائج.

البحث الميداني

يمكنك تعريف عملية بحث حقلي باستخدام بناء الجملة fieldName:searchExpression ، حيث يمكن أن يكون تعبير البحث كلمة واحدة أو عبارة واحدة، أو تعبيرا أكثر تعقيدا بين أقواس، بشكل اختياري مع عوامل التشغيل المنطقية. تتضمن بعض الأمثلة ما يلي:

  • genre:jazz NOT history

  • artists:("Miles Davis" "John Coltrane")

تأكد من وضع سلاسل متعددة ضمن علامات اقتباس إذا كنت تريد تقييم كلتا السلاسل ككيان واحد، في هذه الحالة ابحث عن فنانين متميزين في artists الحقل.

يجب أن يكون الحقل المحدد في fieldName:searchExpression حقلا searchable . راجع إنشاء فهرس للحصول على تفاصيل حول كيفية استخدام سمات الفهرس في تعريفات الحقول.

إشعار

عند استخدام تعبيرات البحث الحقلي، لا تحتاج إلى استخدام المعلمة searchFields لأن كل تعبير بحث حقلي له اسم حقل محدد بشكل صريح. ومع ذلك، لا يزال بإمكانك استخدام المعلمة searchFields إذا كنت تريد تشغيل استعلام حيث يتم تحديد نطاق بعض الأجزاء لحقل معين، ويمكن تطبيق الأجزاء المتبقية على عدة حقول. على سبيل المثال، سيتطابق الاستعلام search=genre:jazz NOT history&searchFields=description مع الحقل فقطgenre، بينما يتطابق NOT history مع descriptionjazz الحقل. اسم الحقل المتوفر في fieldName:searchExpression دائما له الأسبقية على المعلمة searchFields ، وهذا هو السبب في هذا المثال، لا نحتاج إلى تضمين genre في المعلمة searchFields .

بحث غامض

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

لإجراء بحث غامض، استخدم رمز التلدي ~ في نهاية كلمة واحدة مع معلمة اختيارية، رقم بين 0 و2 (افتراضي)، يحدد مسافة التحرير. على سبيل المثال، blue~ أو blue~1 قد يرجع blueو bluesو.glue

لا يمكن تطبيق البحث الغامض إلا على المصطلحات، وليس على العبارات المحاطة باقتباس، ولكن يمكنك إلحاق التلد بكل مصطلح على حدة باسم أو عبارة متعددة الأجزاء. على سبيل المثال، Unviersty~ of~ Wshington~ قد يتطابق مع .University of Washington

البحث عن التقارب

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

تعزيز المصطلحات

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

يساعد المثال التالي على توضيح الاختلافات. لنفترض أن هناك ملف تعريف تسجيل يعزز التطابقات في حقل معين، قل النوع في مثال musicstoreindex. يمكن استخدام تعزيز المصطلح لزيادة تعزيز بعض مصطلحات البحث أعلى من غيرها. على سبيل المثال، rock^2 electronic يعزز المستندات التي تحتوي على مصطلحات البحث في حقل النوع أعلى من الحقول الأخرى القابلة للبحث في الفهرس. علاوة على ذلك، يتم تصنيف المستندات التي تحتوي على مصطلح البحث rock أعلى من مصطلح البحث الإلكتروني الآخر كنتيجة لمصطلح قيمة التعزيز (2).

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

البحث العادي في التعبير

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

على سبيل المثال، للبحث عن المستندات التي motel تحتوي على أو hotel، حدد /[mh]otel/. تتم مطابقة عمليات البحث العادية في التعبير مع كلمات مفردة.

تفرض بعض الأدوات واللغات متطلبات إضافية لحرف الإلغاء تتجاوز قواعد الإلغاء التي يفرضها Azure الذكاء الاصطناعي Search. بالنسبة إلى JSON، يتم إلغاء السلاسل التي تتضمن شرطة مائلة للأمام مع شرطة مائلة للخلف: microsoft.com/azure/ تصبح search=/.*microsoft.com\/azure\/.*/ حيث search=/.* <string-placeholder>.*/ تقوم بإعداد التعبير العادي، وهي microsoft.com\/azure\/ السلسلة مع شرطة مائلة للأمام تم الهروب.

رمزان شائعان في استعلامات regex هما . و *. يطابق . أي حرف واحد ويطابق * الحرف السابق صفرا أو أكثر من المرات. على سبيل المثال، /be./ يطابق المصطلحات bee و bet بينما /be*/ يتطابق beمع و beeو beee ولكن ليس bet. معا، .* اسمح لك بمطابقة أي سلسلة من الأحرف بحيث /be.*/ تتطابق مع أي مصطلح يبدأ مثل bebetter.

إذا تلقيت أخطاء في بناء الجملة في التعبير العادي، فراجع قواعد الإلغاء للأحرف الخاصة. يمكنك أيضا تجربة عميل مختلف لتأكيد ما إذا كانت المشكلة خاصة بالأدوات.

البحث عن أحرف البدل

يمكنك استخدام بناء الجملة المتعرف عليه بشكل عام لعمليات بحث أحرف بدل متعددة (*) أو مفردة (?). يدعم بناء جملة Lucene الكامل مطابقة البادئة والبادئة واللاحقة.

لاحظ أن محلل استعلام Lucene يدعم استخدام هذه الرموز مع مصطلح واحد، وليس عبارة.

نوع Affix الوصف والأمثلة
البادئة يأتي جزء المصطلح قبل * أو ?. على سبيل المثال، تعبير استعلام عن search=alpha* الإرجاع alphanumeric أو alphabetical. يتم دعم مطابقة البادئة في بناء الجملة البسيط والكامل على حد سواء.
لاحقة يأتي جزء المصطلح بعد * أو ?، مع شرطة مائلة للأمام لتحديد البنية. على سبيل المثال، search=/.*numeric/ إرجاع alphanumeric.
اقحم ترفق * أجزاء المصطلح أو ?. على سبيل المثال، search=non*al إرجاع non-numerical و nonsensical.

يمكنك دمج عوامل التشغيل في تعبير واحد. على سبيل المثال، 980?2* يطابق على 98072-1222 و 98052-1234، حيث ? يتطابق على حرف واحد (مطلوب)، ويتطابق * مع الأحرف ذات الطول العشوائي التي تلي ذلك.

تتطلب مطابقة اللاحقة محددات الشرطة / المائلة للأمام للتعبير العادي. بشكل عام، لا يمكنك استخدام رمز * أو ? كحرف أول من المصطلح، بدون /. من المهم أيضا ملاحظة أن * يتصرف بشكل مختلف عند استخدامه خارج استعلامات regex. خارج محدد الشرطة / المائلة للأمام regex، * هو حرف بدل ويطابق أي سلسلة من الأحرف تشبه .* إلى حد كبير في regex. على سبيل المثال، search=/non.*al/ ينتج نفس مجموعة النتائج مثل search=non*al.

إشعار

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

تأثير محلل على استعلامات أحرف البدل

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

ضع في اعتبارك الموقف الذي قد ترغب فيه في أن يقوم استعلام terminal* البحث بإرجاع النتائج التي تحتوي على مصطلحات مثل terminateو terminationو terminates.

إذا كنت تستخدم محلل en.lucene (اللغة الإنجليزية Lucene)، فإنه سيطبق النبع العدواني لكل مصطلح. على سبيل المثال، terminateterminationterminates ، سيتم رمز جميعها إلى الرمز المميز termi في الفهرس الخاص بك. على الجانب الآخر، لا يتم تحليل المصطلحات في الاستعلامات التي تستخدم أحرف البدل أو البحث الغامض على الإطلاق، لذلك لن تكون هناك نتائج تطابق terminat* الاستعلام.

على الجانب الآخر، تعد محللات Microsoft (في هذه الحالة، محلل en.microsoft) أكثر تقدما قليلا وتستخدم lemmatization بدلا من النبع. وهذا يعني أن جميع الرموز المميزة التي تم إنشاؤها يجب أن تكون كلمات إنجليزية صالحة. على سبيل المثال، terminateterminatestermination ، و، و سيبقى في الغالب كامل في الفهرس، وسيكون خيارا مفضلا للسيناريوهات التي تعتمد كثيرا على أحرف البدل والبحث الغامض.

تسجيل استعلامات البدل و regex

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

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

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

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

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

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

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

تجميع الحقول مشابه ولكن نطاق التجميع إلى حقل واحد. على سبيل المثال، hotelAmenities:(gym+(wifi|pool)) يبحث في الحقل hotelAmenities عن gym و و wifiأو gym و pool.

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

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

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

(راجع أيضًا )