أمثلة على بناء جملة بحث Lucene "الكامل" (الاستعلامات المتقدمة في Azure الذكاء الاصطناعي Search)

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

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

إشعار

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

فهرس عينة الفنادق

تستند الاستعلامات التالية إلى فهرس hotels-sample، والذي يمكنك إنشاؤه باتباع الإرشادات الواردة في هذا التشغيل السريع.

يتم توضيح أمثلة الاستعلامات باستخدام REST API وطلبات POST. يمكنك لصقها وتشغيلها في عميل REST. أو استخدم طريقة عرض JSON لمستكشف البحث في مدخل Microsoft Azure. في طريقة عرض JSON، يمكنك اللصق في أمثلة الاستعلام الموضحة هنا في هذه المقالة.

يجب أن تحتوي رؤوس الطلبات على القيم التالية:

مفتاح القيمة
Content-Type تطبيق/json
مفتاح واجهة برمجة التطبيقات <your-search-service-api-key>، إما الاستعلام أو مفتاح المسؤول

يجب أن تتضمن معلمات URI نقطة نهاية خدمة البحث الخاصة بك مع اسم الفهرس ومجموعات المستندات وأمر البحث وإصدار واجهة برمجة التطبيقات، على غرار المثال التالي:

https://{{service-name}}.search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2023-11-01

يجب تشكيل نص الطلب ك JSON صالح:

{
    "search": "*",
    "queryType": "full",
    "select": "HotelId, HotelName, Category, Tags, Description",
    "count": true
}
  • "البحث" الذي تم تعيينه إلى * هو استعلام غير محدد، مكافئ للبحث الفارغ أو الفارغ. إنه ليس مفيدا بشكل خاص، ولكنه أبسط بحث يمكنك القيام به، ويعرض جميع الحقول القابلة للاسترداد في الفهرس، مع جميع القيم.

  • يستدعي "queryType" الذي تم تعيينه إلى "كامل" محلل استعلام Lucene الكامل وهو مطلوب لبناء الجملة هذا.

  • يتم استخدام "تحديد" المعين إلى قائمة الحقول المحددة بفاصلة لتكوين نتائج البحث، بما في ذلك الحقول المفيدة فقط في سياق نتائج البحث.

  • يقوم "count" بإرجاع عدد المستندات المطابقة لمعايير البحث. في سلسلة بحث فارغة، يكون العدد هو جميع المستندات في الفهرس (50 في فهرس عينة الفنادق).

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

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

POST /indexes/hotel-samples-index/docs/search?api-version=2023-11-01
{
    "search": "HotelName:(hotel NOT motel) AND Category:'Resort and Spa'",
    "queryType": "full",
    "select": "HotelName, Category",
    "count": true
}

يجب أن تبدو الاستجابة لهذا الاستعلام مشابهة للمثال التالي، الذي تمت تصفيته على "Resort and Spa"، مع إرجاع الفنادق التي تتضمن "hotel" في الاسم، مع استبعاد النتائج التي تتضمن "hotel" في الاسم.

"@odata.count": 4,
"value": [
    {
        "@search.score": 4.481559,
        "HotelName": "Nova Hotel & Spa",
        "Category": "Resort and Spa"
    },
    {
        "@search.score": 2.4524608,
        "HotelName": "King's Palace Hotel",
        "Category": "Resort and Spa"
    },
    {
        "@search.score": 2.3970203,
        "HotelName": "Triple Landscape Hotel",
        "Category": "Resort and Spa"
    },
    {
        "@search.score": 2.2953436,
        "HotelName": "Peaceful Market Hotel & Spa",
        "Category": "Resort and Spa"
    }
]

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

  • HotelName:(hotel NOT motel)
  • Address/StateProvince:("WA" OR "CA")
  • Tags:("free wifi" NOT "free parking") AND "coffee in lobby"

تأكد من وضع عبارة ضمن علامات الاقتباس إذا كنت تريد تقييم كلتا السلاسل ككيان واحد، كما هو الحال في هذه الحالة البحث عن موقعين مميزين في حقل Address/StateProvince. اعتمادا على العميل، قد تحتاج إلى إلغاء (\) علامات الاقتباس.

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

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

POST /indexes/hotel-samples-index/docs/search?api-version=2023-11-01
{
    "search": "Tags:conserge~",
    "queryType": "full",
    "select": "HotelName, Category, Tags",
    "searchFields": "HotelName, Category, Tags",
    "count": true
}

تحل الاستجابة لهذا الاستعلام إلى "concierge" في المستندات المطابقة، مقتسمة للإيجاز:

"@odata.count": 12,
"value": [
    {
        "@search.score": 1.1832147,
        "HotelName": "Secret Point Motel",
        "Category": "Boutique",
        "Tags": [
            "pool",
            "air conditioning",
            "concierge"
        ]
    },
    {
        "@search.score": 1.1819803,
        "HotelName": "Twin Dome Motel",
        "Category": "Boutique",
        "Tags": [
            "pool",
            "free wifi",
            "concierge"
        ]
    },
    {
        "@search.score": 1.1773309,
        "HotelName": "Smile Hotel",
        "Category": "Suite",
        "Tags": [
            "view",
            "concierge",
            "laundry service"
        ]
    },

العبارات غير مدعومة مباشرة ولكن يمكنك تحديد تطابق غامض على كل مصطلح من عبارات متعددة الأجزاء، مثل search=Tags:landy~ AND sevic~. يبحث تعبير الاستعلام هذا عن 15 تطابقا على "خدمة الغسيل".

إشعار

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

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

يبحث هذا الاستعلام عن مصطلحي "hotel" و"airport" في غضون 5 كلمات من بعضهما البعض في مستند. يتم إلغاء علامات الاقتباس (\") للحفاظ على العبارة:

POST /indexes/hotel-samples-index/docs/search?api-version=2023-11-01
{
    "search": "Description: \"hotel airport\"~5",
    "queryType": "full",
    "select": "HotelName, Description",
    "searchFields": "HotelName, Description",
    "count": true
}

يجب أن تبدو الاستجابة لهذا الاستعلام مشابهة للمثال التالي:

"@odata.count": 2,
"value": [
    {
        "@search.score": 0.6331726,
        "HotelName": "Trails End Motel",
        "Description": "Only 8 miles from Downtown.  On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport."
    },
    {
        "@search.score": 0.43032226,
        "HotelName": "Catfish Creek Fishing Cabins",
        "Description": "Brand new mattresses and pillows.  Free airport shuttle. Great hotel for your business needs. Comp WIFI, atrium lounge & restaurant, 1 mile from light rail."
    }
]

مثال 4: تعزيز المصطلح

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

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

POST /indexes/hotel-samples-index/docs/search?api-version=2023-11-01
{
    "search": "beach access",
    "queryType": "full",
    "select": "HotelName, Description, Tags",
    "searchFields": "HotelName, Description, Tags",
    "count": true
}

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

"@odata.count": 7,
"value": [
    {
        "@search.score": 2.2723424,
        "HotelName": "Nova Hotel & Spa",
        "Description": "1 Mile from the airport.  Free WiFi, Outdoor Pool, Complimentary Airport Shuttle, 6 miles from the beach & 10 miles from downtown."
    },
    {
        "@search.score": 1.5507699,
        "HotelName": "Old Carrabelle Hotel",
        "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center."
    },
    {
        "@search.score": 1.5358944,
        "HotelName": "Whitefish Lodge & Suites",
        "Description": "Located on in the heart of the forest. Enjoy Warm Weather, Beach Club Services, Natural Hot Springs, Airport Shuttle."
    },
    {
        "@search.score": 1.3433652,
        "HotelName": "Ocean Air Motel",
        "Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Various shops and art entertainment are on the boardwalk, just steps away."
    },

في الاستعلام "بعد"، كرر البحث، وهذه المرة تعزيز النتائج مع مصطلح "الشاطئ" على مصطلح "الوصول". نسخة الإنسان القابلة للقراءة من الاستعلام هي search=Description:beach^2 access. اعتمادا على العميل الخاص بك، قد تحتاج إلى التعبير ^2 عن ك %5E2.

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

مثال 5: Regex

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

POST /indexes/hotel-samples-index/docs/search?api-version=2023-11-01
{
    "search": "HotelName:/(Mo|Ho)tel/",
    "queryType": "full",
    "select": "HotelName",
    "count": true
}

يجب أن تبدو الاستجابة لهذا الاستعلام مشابهة للمثال التالي:

    "@odata.count": 22,
    "value": [
        {
            "@search.score": 1.0,
            "HotelName": "Days Hotel"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Triple Landscape Hotel"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Smile Hotel"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Pelham Hotel"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Sublime Cliff Hotel"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Twin Dome Motel"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Nova Hotel & Spa"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Scarlet Harbor Hotel"
        },

إشعار

لا يتم تحليل استعلامات Regex. التحويل الوحيد الذي يتم إجراؤه على مصطلحات الاستعلام الجزئي هو غلاف أقل.

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

في هذا الاستعلام، ابحث عن أسماء الفنادق التي تحتوي على البادئة 'sc'. لا يمكنك استخدام رمز * أو ? كحرف أول من البحث.

POST /indexes/hotel-samples-index/docs/search?api-version=2023-11-01
{
    "search": "HotelName:sc*",
    "queryType": "full",
    "select": "HotelName",
    "count": true
}

يجب أن تبدو الاستجابة لهذا الاستعلام مشابهة للمثال التالي:

    "@odata.count": 2,
    "value": [
        {
            "@search.score": 1.0,
            "HotelName": "Scarlet Harbor Hotel"
        },
        {
            "@search.score": 1.0,
            "HotelName": "Scottish Inn"
        }
    ]

إشعار

لا يتم تحليل استعلامات أحرف البدل. التحويل الوحيد الذي يتم إجراؤه على مصطلحات الاستعلام الجزئي هو غلاف أقل.

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

حاول تحديد الاستعلامات في التعليمات البرمجية. يغطي الارتباط التالي كيفية إعداد استعلامات البحث باستخدام Azure SDKs.

يمكن العثور على مزيد من مرجع بناء الجملة وبنية الاستعلام والأمثلة في الارتباطات التالية: