بناء جملة استعلام Lucene في Azure Cognitive Search
عند إنشاء استعلامات، يمكنك اختيار بناء جملة محلل الاستعلام Lucene لنماذج الاستعلام المتخصصة : حرف البدل، البحث الضبابي، البحث عن القرب، التعبيرات العادية. يتم تنفيذ جزء كبير من بناء جملة محلل استعلام Lucene سليما في Azure Cognitive Search، باستثناء عمليات البحث عن النطاق التي يتم إنشاؤها من خلال $filter التعبيرات.
لاستخدام بناء جملة Lucene الكامل، ستقوم بتعيين queryType إلى "ممتلئ" وتمرير تعبير استعلام منقوش لحرف البدل أو البحث الضبابي أو أحد نماذج الاستعلام الأخرى التي يدعمها بناء الجملة الكامل. في REST، يتم توفير تعبيرات الاستعلام search في معلمة طلب "واجهة برمجة تطبيقات REST للمستندات البحثية ".
مثال (بناء جملة كامل)
المثال التالي هو طلب بحث تم إنشاؤه باستخدام بناء الجملة الكامل. يوضح هذا المثال بالذات البحث الميداني وتعزيز المصطلحات. يبحث عن الفنادق التي يحتوي فيها حقل الفئة على مصطلح "الميزانية". يتم تصنيف أي مستندات تحتوي على عبارة "تم تجديدها مؤخرا" في مرتبة أعلى نتيجة لمصطلح زيادة القيمة (3).
POST /indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
"queryType": "full",
"search": "category:budget AND \"recently renovated\"^3",
"searchMode": "all"
}
على الرغم من أنها ليست خاصة بأي نوع استعلام، إلا أن المعلمة searchMode ذات صلة في هذا المثال. عندما يكون المشغلون على الاستعلام، يجب عليك تعيينه searchMode=all بشكل عام للتأكد من مطابقة جميع المعايير.
للحصول على أمثلة إضافية، راجع أمثلة بناء جملة استعلام Lucene. للحصول على تفاصيل حول طلب الاستعلام والمعلمات، بما في ذلك searchMode، راجع البحث في المستندات (REST API).
أساسيات بناء الجملة
تنطبق أساسيات بناء الجملة التالية على كافة الاستعلامات التي تستخدم بناء جملة Lucene.
تقييم المشغل في السياق
يحدد الموضع ما إذا كان الرمز يفسر على أنه عامل تشغيل أو مجرد حرف آخر في سلسلة.
على سبيل المثال ، في بناء جملة Lucene الكامل ، يتم استخدام tilde (~) لكل من البحث الضبابي والبحث عن القرب. عند وضعها بعد عبارة مقتبسة ، ~ يستدعي البحث عن القرب. عند وضعها في نهاية المصطلح ، ~ يستدعي البحث الغامض.
في غضون فترة ، مثل "Business ~ analyst" ، لا يتم تقييم الشخصية كمشغل. في هذه الحالة ، على افتراض أن الاستعلام عبارة عن استعلام عن مصطلح أو عبارة ، فإن البحث عن النص الكامل باستخدام التحليل المعجمي يجرد ~ ويكسر مصطلح "Business ~ analyst" إلى قسمين: Business OR analyst.
المثال أعلاه هو التلدة (~) ، ولكن نفس المبدأ ينطبق على كل مشغل.
الهروب من الشخصيات الخاصة
لاستخدام أي من عوامل تشغيل البحث كجزء من نص البحث، يمكنك الهروب من الحرف عن طريق بادئته بشرطة مائلة خلفية واحدة (\). على سبيل المثال، للبحث عن حرف بدل على https://، حيث :// هو جزء من سلسلة الاستعلام، يمكنك تحديد search=https\:\/\/*. وبالمثل ، قد يبدو نمط رقم الهاتف الهارب هكذا \+1 \(800\) 642\-7676.
تتضمن الأحرف الخاصة التي تتطلب الهروب ما يلي:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /
ملاحظة
على الرغم من أن الهروب يحافظ على الرموز المميزة معا ، إلا أن التحليل المعجمي أثناء الفهرسة قد يجردها. على سبيل المثال، سيقوم محلل Lucene القياسي بكسر الكلمات على الواصلات والمسافات البيضاء والأحرف الأخرى. إذا كنت بحاجة إلى أحرف خاصة في سلسلة الاستعلام، فقد تحتاج إلى محلل يحافظ عليها في الفهرس. تتضمن بعض الخيارات محللات اللغة الطبيعية من Microsoft، التي تحافظ على الكلمات الواصلة، أو محلل مخصص للأنماط الأكثر تعقيدا. لمزيد من المعلومات، راجع المصطلحات الجزئية والأنماط والأحرف الخاصة.
ترميز الأحرف غير الآمنة والمحجوزة في عناوين URL
يرجى التأكد من ترميز جميع الأحرف غير الآمنة والمحجوزة في عنوان URL. على سبيل المثال، "#" هو حرف غير آمن لأنه معرف جزء/مرساة في عنوان URL. يجب ترميز الحرف إذا %23 تم استخدامه في عنوان URL. "" و "&=" هما مثالان على الأحرف المحجوزة لأنها تحدد المعلمات وتحدد القيم في Azure Cognitive Search. يرجى الاطلاع على RFC1738: محددات مواقع الموارد الموحدة (URL) لمزيد من التفاصيل.
الأحرف غير الآمنة هي " ` < > # % { } | \ ^ ~ [ ]. الأحرف المحجوزة هي ; / ? : @ = + &.
عوامل منطقية
يمكنك تضمين عوامل التشغيل المنطقية في سلسلة استعلام لتحسين دقة المطابقة. يدعم بناء الجملة الكامل مشغلي النصوص بالإضافة إلى عوامل تشغيل الأحرف. حدد دائما عوامل تشغيل النص المنطقية (و، أو، لا) في جميع الأحرف الكبيرة.
| عامل تشغيل النص | حرف | مثال | الاستخدام |
|---|---|---|---|
| و | + |
wifi AND luxury |
يحدد المصطلحات التي يجب أن تحتوي عليها المطابقة. في المثال ، سيبحث محرك الاستعلام عن المستندات التي تحتوي على كل من wifi و luxury. يمكن أيضا استخدام حرف الجمع (+) مباشرة أمام المصطلح لجعله مطلوبا. على سبيل المثال ، +wifi +luxury ينص على أن كلا المصطلحين يجب أن يظهرا في مكان ما في حقل مستند واحد. |
| أو | (لا يوجد) 1 | wifi OR luxury |
العثور على تطابق عند العثور على أي من المصطلحين. في المثال، سيقوم محرك الاستعلام بإرجاع المطابقة على المستندات التي تحتوي على أي منهما wifi أو luxury كليهما. نظرا لأن OR هو عامل تشغيل الاقتران الافتراضي ، يمكنك أيضا تركه ، بحيث wifi luxury يكون مكافئا ل wifi OR luxury. |
| NOT | !, - |
wifi –luxury |
إرجاع التطابقات على المستندات التي تستبعد المصطلح. على سبيل المثال ، wifi –luxury سيتم البحث عن المستندات التي تحتوي على wifi المصطلح ولكن ليس luxury. تتحكم المعلمة الموجودة في طلب استعلام فيما إذا كان المصطلح الذي يحتوي على عامل التشغيل NOT هو ANDed أو ORed مع مصطلحات أخرى في الاستعلام searchMode (على افتراض عدم وجود عوامل تشغيل منطقية بالشروط الأخرى). تتضمن any القيم الصالحة أو all. searchMode=any يزيد من استدعاء الاستعلامات من خلال تضمين المزيد من النتائج ، وسيتم تفسيره افتراضيا - على أنه "أو لا". على سبيل المثال، wifi -luxury سوف تتطابق مع المستندات التي تحتوي إما على المصطلح أو تلك التي لا تحتوي على المصطلح wifiluxury. searchMode=all يزيد من دقة الاستعلامات من خلال تضمين نتائج أقل ، وبشكل افتراضي - سيتم تفسيره على أنه "وليس". على سبيل المثال، wifi -luxury ستتطابق مع المستندات التي تحتوي على المصطلح wifi ولا تحتوي على مصطلح "الرفاهية". يمكن القول إن هذا سلوك أكثر بديهية للمشغل - . لذلك ، يجب أن تفكر في استخدام searchMode=all بدلا من ما إذا كنت ترغب في تحسين عمليات البحث عن الدقة بدلا من searchMode=any التذكر ، وكثيرا ما يستخدم - المستخدمون عامل التشغيل في عمليات البحث.عند اتخاذ قرار بشأن أحد searchMode الإعدادات، ضع في اعتبارك أنماط تفاعل المستخدم للاستعلامات في التطبيقات المختلفة. من المرجح أن يقوم المستخدمون الذين يبحثون عن معلومات بتضمين عامل تشغيل في استعلام ، على عكس مواقع التجارة الإلكترونية التي تحتوي على المزيد من هياكل التنقل المضمنة. |
|1 الحرف غير معتمد لعمليات OR.
البحث الميداني
يمكنك تعريف عملية بحث ميدانية باستخدام بناء الجملة fieldName:searchExpression ، حيث يمكن أن يكون تعبير البحث عبارة عن كلمة واحدة أو عبارة، أو تعبيرا أكثر تعقيدا بين قوسين، اختياريا باستخدام عوامل التشغيل المنطقية. وتشمل بعض الأمثلة ما يلي:
النوع:موسيقى الجاز وليس التاريخ
الفنانون: ("مايلز ديفيس" "جون كولترين")
تأكد من وضع سلاسل متعددة ضمن علامات الاقتباس إذا كنت تريد تقييم كلتا السلسلتين ككيان واحد ، وفي هذه الحالة ابحث عن فنانين متميزين في artists هذا المجال.
يجب أن يكون الحقل المحدد في fieldName:searchExpression حقل searchable . راجع إنشاء فهرس للحصول على تفاصيل حول كيفية استخدام سمات الفهرس في تعريفات الحقول.
ملاحظة
عند استخدام تعبيرات البحث الميدانية، لا تحتاج إلى استخدام المعلمة searchFields لأن كل تعبير بحث ميداني له اسم حقل محدد صراحة. ومع ذلك، لا يزال بإمكانك استخدام المعلمة searchFields إذا كنت تريد تشغيل استعلام حيث يتم تحديد نطاق بعض الأجزاء إلى حقل معين، ويمكن تطبيق الباقي على عدة حقول. على سبيل المثال، سيتطابق الاستعلام مع الحقل genre فقط، بينما يتطابق NOT historyjazz مع الحقلdescription.search=genre:jazz NOT history&searchFields=description اسم الحقل المقدم في دائما له الأسبقية على المعلمة ، وهذا هو السبب في أننا في هذا المثال ، لا نحتاج إلى تضمينه في fieldName:searchExpression المعلمة searchFieldssearchFields.genre
بحث غامض
يجد البحث الضبابي تطابقات في المصطلحات التي لها بنية مماثلة ، مما يؤدي إلى توسيع مصطلح يصل إلى 50 مصطلحا كحد أقصى يفي بمعايير المسافة لمصطلحين أو أقل. لمزيد من المعلومات، راجع البحث الضبابي.
لإجراء بحث غامض ، استخدم رمز التلدة "~" في نهاية كلمة واحدة مع معلمة اختيارية ، رقم يتراوح بين 0 و 2 (افتراضي) ، يحدد مسافة التحرير. على سبيل المثال ، "الأزرق ~" أو "الأزرق ~ 1" سيعود "الأزرق" و "البلوز" و "الغراء".
لا يمكن تطبيق البحث الضبابي إلا على المصطلحات، وليس العبارات، ولكن يمكنك إلحاق التلدة بكل مصطلح على حدة في اسم أو عبارة متعددة الأجزاء. على سبيل المثال ، "Unviersty ~ من ~ "Wshington ~" ستتطابق مع "جامعة واشنطن".
البحث عن قرب
تستخدم عمليات البحث عن قرب للعثور على المصطلحات القريبة من بعضها البعض في مستند. أدخل رمز التلدة "~" في نهاية العبارة متبوعا بعدد الكلمات التي تنشئ حدود القرب. على سبيل المثال ، "hotel airport"~5 ستجد مصطلحي "فندق" و "مطار" في غضون 5 كلمات من بعضهما البعض في مستند.
تعزيز المدة
يشير مصطلح تعزيز المصطلح إلى ترتيب مستند أعلى إذا كان يحتوي على المصطلح المعزز، مقارنة بالمستندات التي لا تحتوي على المصطلح. يختلف هذا عن ملفات تعريف التسجيل في أن ملفات تعريف التسجيل تعزز حقولا معينة ، بدلا من مصطلحات محددة.
يساعد المثال التالي في توضيح الاختلافات. لنفترض أن هناك ملف تعريف تسجيل يعزز المباريات في حقل معين ، على سبيل المثال النوع في مثال musicstoreindex. يمكن استخدام تعزيز المصطلح لزيادة تعزيز بعض عبارات البحث أعلى من غيرها. على سبيل المثال، rock^2 electronic سيتم تعزيز المستندات التي تحتوي على مصطلحات البحث في حقل النوع أعلى من الحقول الأخرى القابلة للبحث في الفهرس. علاوة على ذلك ، سيتم تصنيف المستندات التي تحتوي على مصطلح البحث rock أعلى من مصطلح البحث الإلكتروني الآخر نتيجة لمصطلح تعزيز القيمة (2).
لتعزيز مصطلح، استخدم رمز الإقحام "^"، مع عامل تعزيز (رقم) في نهاية المصطلح الذي تبحث عنه. يمكنك أيضا تعزيز العبارات. كلما زاد عامل التعزيز ، كلما كان المصطلح أكثر ملاءمة لمصطلحات البحث الأخرى. بشكل افتراضي ، يكون عامل التعزيز هو 1. على الرغم من أن عامل التعزيز يجب أن يكون إيجابيا ، إلا أنه يمكن أن يكون أقل من 1 (على سبيل المثال ، 0.20).
البحث المنتظم عن التعبير
يعثر البحث المنتظم عن التعبير على تطابق استنادا إلى الأنماط الصالحة ضمن Apache Lucene، كما هو موثق في فئة RegExp. في Azure Cognitive Search ، يتم تضمين تعبير منتظم بين الشرطة المائلة /للأمام .
على سبيل المثال ، للعثور على المستندات التي تحتوي على "موتيل" أو "فندق" ، حدد /[mh]otel/. تتم مطابقة عمليات البحث عن التعبيرات العادية مع الكلمات المفردة.
تفرض بعض الأدوات واللغات متطلبات إضافية لشخصية الهروب. بالنسبة إلى JSON، يتم الهروب من السلاسل التي تتضمن شرطة مائلة للأمام بشرطة مائلة للخلف: تصبح search=/.*microsoft.com\/azure\/.*/ "microsoft.com/azure/" هي المكان الذي تقوم فيه search=/.* <string-placeholder>.*/ بإعداد التعبير العادي، microsoft.com\/azure\/ وهي السلسلة ذات الشرطة المائلة للأمام الهاربة.
رمزان شائعان في استعلامات regex هما . و *. A . يطابق أي حرف واحد و a * يطابق الحرف السابق صفر أو أكثر من المرات. على سبيل المثال ، /be./ سوف تتطابق مع مصطلحات "نحلة" و "رهان" بينما /be*/ ستتطابق مع "تكون" و "نحلة" و "نحلة" ولكن ليس "رهان". معا ، .* تسمح لك بمطابقة أي سلسلة من الشخصيات حتى /be.*/ تتطابق مع أي مصطلح يبدأ ب "يكون" مثل "أفضل".
البحث عن أحرف البدل
يمكنك استخدام بناء الجملة المعترف به بشكل عام لعمليات البحث عن أحرف بدل متعددة* () أو مفردة (?) أحرف بريد. يدعم بناء جملة Lucene الكامل مطابقة البادئة والفيfix واللاحقة.
لاحظ أن محلل استعلام Lucene يدعم استخدام هذه الرموز بمصطلح واحد وليس بعبارة.
| نوع الملحق | الوصف والأمثلة |
|---|---|
| البادئة | جزء المصطلح يأتي قبل * أو ?. على سبيل المثال، يؤدي تعبير استعلام إلى search=alpha* إرجاع "أبجدي رقمي" أو "أبجدي". يتم دعم مطابقة البادئة في كل من بناء الجملة البسيط والكامل. |
| اللاحقة | يأتي جزء المصطلح بعد * أو ?، مع شرطة مائلة للأمام لتحديد البناء. على سبيل المثال، search=/.*numeric/ ترجع الدالة "أبجدي رقمي". |
| اقحم | أجزاء المصطلح المرفقة * أو ?. على سبيل المثال، search=non*al إرجاع "غير رقمي" و "لا معنى له". |
يمكنك دمج عوامل التشغيل في تعبير واحد. على سبيل المثال، التطابقات على "98072-1222" و "98052-1234"، 980?2* حيث ? تتطابق على حرف واحد (مطلوب)، وتتطابق * على أحرف ذات طول تعسفي تليها.
تتطلب مطابقة اللاحقة محددات الشرطة المائلة / للأمام للتعبير العادي. بشكل عام ، لا يمكنك استخدام * رمز أو ? رمز كحرف أول من المصطلح ، بدون /. من المهم أيضا ملاحظة أن ال regex * سيتصرف بشكل مختلف عند استخدامه خارج استعلامات regex. خارج أو محددات الشرطة المائلة / الأمامية regex ، فإن حرف البدل * هو حرف بدل وسيتطابق مع أي سلسلة من الأحرف كما هو الحال .* في regex. على سبيل المثال ، search=/non.*al/ ستنتج نفس مجموعة النتائج مثل search=non*al.
ملاحظة
كقاعدة عامة ، تكون مطابقة الأنماط بطيئة ، لذا قد ترغب في استكشاف طرق بديلة ، مثل ترميز edge n-gram الذي ينشئ رموزا لتسلسل الأحرف في مصطلح. باستخدام ترميز n-gram ، سيكون الفهرس أكبر ، ولكن قد يتم تنفيذ الاستعلامات بشكل أسرع ، اعتمادا على بناء النمط وطول السلاسل التي تقوم بفهرستها. لمزيد من المعلومات، راجع البحث الجزئي عن المصطلحات والأنماط ذات الأحرف الخاصة.
تأثير محلل على استعلامات أحرف البدل
أثناء تحليل الاستعلام، يتم تمرير الاستعلامات التي تمت صياغتها كبادئة أو لاحقة أو أحرف بدل أو تعبيرات عادية كما هي إلى شجرة الاستعلام، متجاوزة التحليل المعجمي. لن يتم العثور على التطابقات إلا إذا كان الفهرس يحتوي على السلاسل بالتنسيق الذي يحدده الاستعلام. في معظم الحالات، ستحتاج إلى محلل أثناء الفهرسة يحافظ على سلامة السلسلة بحيث تنجح المطابقة الجزئية للمصطلح والأنماط. لمزيد من المعلومات، راجع البحث الجزئي عن المصطلحات في استعلامات البحث المعرفي في Azure.
ضع في اعتبارك موقفا قد ترغب فيه في أن يعرض طلب البحث "terminat*" نتائج تحتوي على مصطلحات مثل "إنهاء" و"إنهاء" و"إنهاء".
إذا كنت ستستخدم محلل en.lucene (اللغة الإنجليزية Lucene) ، فسوف يطبق الوقف العدواني لكل مصطلح. على سبيل المثال ، سيتم ترميز كل من "إنهاء" و "إنهاء" و "إنهاء" وصولا إلى الرمز المميز "termi" في فهرسك. على الجانب الآخر ، لا يتم تحليل المصطلحات في الاستعلامات التي تستخدم أحرف البدل أو البحث الغامض على الإطلاق ، لذلك لن تكون هناك نتائج تتطابق مع استعلام "terminat*".
على الجانب الآخر ، فإن محللات Microsoft (في هذه الحالة ، محلل en.microsoft) أكثر تقدما قليلا وتستخدم lemmatization بدلا من الجذعية. هذا يعني أن جميع الرموز المميزة التي تم إنشاؤها يجب أن تكون كلمات إنجليزية صالحة. على سبيل المثال ، ستبقى "الإنهاء" و "الإنهاء" و "الإنهاء" كاملة في الغالب في الفهرس ، وستكون خيارا مفضلا للسيناريوهات التي تعتمد كثيرا على أحرف البدل والبحث الغامض.
تسجيل استعلامات أحرف البدل و regex
يستخدم Azure Cognitive Search التسجيل المستند إلى التردد (BM25) للاستعلامات النصية. ومع ذلك ، بالنسبة لاستعلامات أحرف البدل و regex حيث يمكن أن يكون نطاق المصطلحات واسعا ، يتم تجاهل عامل التكرار لمنع الترتيب من التحيز نحو التطابقات من المصطلحات النادرة. يتم التعامل مع جميع التطابقات بالتساوي لعمليات البحث عن أحرف البدل و regex.
الأحرف الخاصة
في بعض الحالات، قد ترغب في البحث عن شخصية خاصة، مثل ❤ رمز تعبيري "" أو علامة "€". في مثل هذه الحالات، تأكد من أن المحلل الذي تستخدمه لا يقوم بتصفية هذه الأحرف. يتجاوز المحلل القياسي العديد من الأحرف الخاصة، ويستبعدها من الفهرس.
تتضمن أجهزة التحليل التي ستقوم بترميز الأحرف الخاصة محلل "المسافة البيضاء" ، والذي يأخذ في الاعتبار أي تسلسلات أحرف مفصولة بمسافات بيضاء كرموز مميزة (لذلك سيتم اعتبار السلسلة "" ❤ رمزا مميزا). أيضا ، محلل اللغة مثل محلل اللغة الإنجليزية من Microsoft ("en.microsoft") ، سيأخذ سلسلة "€" كرمز مميز. يمكنك اختبار محلل لمعرفة الرموز المميزة التي ينشئها لاستعلام معين.
عند استخدام أحرف Unicode ، تأكد من هروب الرموز بشكل صحيح في عنوان URL للاستعلام (على سبيل المثال ، ستستخدم "" ❤ تسلسل %E2%9D%A4+الهروب ). ساعي البريد يقوم بهذه الترجمة تلقائيا.
الأسبقية (التجميع)
يمكنك استخدام الأقواس لإنشاء استعلامات فرعية، بما في ذلك عوامل التشغيل داخل العبارة بين قوسين. على سبيل المثال ، motel+(wifi|luxury) سيتم البحث عن المستندات التي تحتوي على مصطلح "الموتيل" وإما "wifi" أو "الرفاهية" (أو كليهما).
تجميع الحقول مشابه ولكنه يوسع نطاق التجميع إلى حقل واحد. على سبيل المثال ، يبحث في الحقل "hotelComfortsres" عن "صالة الألعاب الرياضية" و "WiFi" ، hotelAmenities:(gym+(wifi|pool)) أو "صالة الألعاب الرياضية" و "حمام السباحة".
حدود حجم الاستعلام
يفرض Azure Cognitive Search قيودا على حجم الاستعلام وتكوينه لأن الاستعلامات غير المحدودة يمكن أن تزعزع استقرار خدمة البحث لديك. هناك قيود على حجم الاستعلام وتكوينه (عدد البنود). توجد أيضا حدود لطول البحث عن البادئة ولتعقيد بحث regex والبحث عن أحرف البدل. إذا كان تطبيقك ينشئ استعلامات بحث برمجيا، فإننا نوصي بتصميمه بطريقة لا تنشئ استعلامات ذات حجم غير محدود.
لمزيد من المعلومات حول حدود الاستعلام، راجع حدود طلب واجهة برمجة التطبيقات.