محللات لمعالجة النصوص في Azure Cognitive Search

المحلل هو أحد مكونات محرك بحث النص الكامل المسؤول عن معالجة السلاسل أثناء الفهرسة وتنفيذ الاستعلام. معالجة النص (المعروف أيضا باسم التحليل المعجمي) هي تحويلية ، وتعديل سلسلة من خلال إجراءات مثل هذه:

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

ينطبق التحليل على الحقول التي تم وضع علامة عليها على Edm.String أنها "قابلة للبحث"، مما يشير إلى البحث في النص الكامل.

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

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

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

محلل افتراضي

في Azure Cognitive Search، يتم استدعاء محلل تلقائيا في جميع حقول السلسلة التي تم وضع علامة عليها على أنها قابلة للبحث.

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

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

أنواع أجهزة التحليل

توضح القائمة التالية أدوات التحليل المتوفرة في Azure Cognitive Search.

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

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

يتم استخدام محللات اللغة عندما تحتاج إلى دعم لغوي غني للغات الفردية. يدعم Azure Cognitive Search 35 محلل لغة Lucene و 50 محلل معالجة لغة طبيعية من Microsoft.
محللات مخصصة يشير إلى تكوين معرف من قبل المستخدم لمجموعة من العناصر الموجودة ، تتكون من رمز مميز واحد (مطلوب) ومرشحات اختيارية (char أو token).

يدعم عدد قليل من أجهزة التحليل المضمنة، مثل Pattern أو Stop، مجموعة محدودة من خيارات التكوين. لتعيين هذه الخيارات، قم بإنشاء محلل مخصص، يتكون من المحلل المدمج وأحد الخيارات البديلة الموثقة في أجهزة التحليل المضمنة. كما هو الحال مع أي تكوين مخصص، قم بتزويد التكوين الجديد باسم، مثل myPatternAnalyzer لتمييزه عن محلل نمط Lucene.

كيفية تحديد أجهزة التحليل

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

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

      "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": "en.microsoft",
       "indexAnalyzer": null,
       "searchAnalyzer": null
     },
    

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

  2. بدلا من ذلك ، قم بتعيين "indexAnalyzer" و "searchAnalyzer" لتغيير المحلل لكل عبء عمل. يتم تعيين هذه الخصائص معا واستبدال خاصية "المحلل" ، والتي يجب أن تكون فارغة. يمكنك استخدام محللات مختلفة للفهرسة والاستعلامات إذا كان أحد هذه الأنشطة يتطلب تحويلا محددا لا يحتاجه الآخر.

      "fields": [
     {
       "name": "ProductGroup",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "indexAnalyzer": "keyword",
       "searchAnalyzer": "standard"
     },
    
  3. بالنسبة لأجهزة التحليل المخصصة فقط، قم بإنشاء إدخال في قسم [المحللين] من الفهرس، ثم قم بتعيين محلل مخصص لتعريف الحقل لكل من الخطوتين السابقتين. لمزيد من المعلومات، راجع إنشاء فهرسوإضافة محللات مخصصة.

متى يجب إضافة أجهزة التحليل

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

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

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

لإضافة حقل جديد إلى فهرس موجود، اتصل بتحديث الفهرس لإضافة الحقل، وقم بدمج OrUpload لتعبئته.

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

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

التوصيات للعمل مع أجهزة التحليل

يقدم هذا القسم نصائح حول كيفية العمل مع المحللين.

محلل واحد للقراءة والكتابة ما لم يكن لديك متطلبات محددة

يتيح لك Azure Cognitive Search تحديد محللات مختلفة للفهرسة والبحث عبر خصائص حقل indexAnalyzer وsearchAnalyzer إضافية. إذا لم يتم تحديده، يتم استخدام المحلل الذي تم تعيينه مع خاصية المحلل لكل من الفهرسة والبحث. إذا كان المحلل غير محدد، استخدام محلل Lucene القياسي الافتراضي.

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

اختبار أثناء التطوير النشط

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

فحص المصطلحات الرمزية

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

أمثلة REST

توضح الأمثلة أدناه تعريفات المحلل لبعض السيناريوهات الرئيسية.

مثال على محلل مخصص

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

المشي من خلال هذا المثال:

  • أجهزة التحليل هي خاصية لفئة الحقل لحقل قابل للبحث.

  • يعد المحلل المخصص جزءا من تعريف الفهرس. قد يتم تخصيصه بشكل خفيف (على سبيل المثال ، تخصيص خيار واحد في مرشح واحد) أو تخصيصه في أماكن متعددة.

  • في هذه الحالة ، يكون المحلل المخصص هو "my_analyzer" ، والذي بدوره يستخدم رمزا قياسيا مخصصا "my_standard_tokenizer" واثنين من مرشحات الرمز المميز: مرشح asciifolding صغير ومخصص "my_asciifolding".

  • كما يحدد 2 مرشحات char مخصصة "map_dash" و "remove_whitespace". الأول يستبدل جميع الشرطات بشرطة سفلية بينما يزيل الثاني جميع المسافات. يجب ترميز المسافات UTF-8 في قواعد التعيين. يتم تطبيق مرشحات char قبل الترميز وستؤثر على الرموز المميزة الناتجة (فواصل الرمز المميز القياسي على الشرطة والمسافات ولكن ليس على الشرطة السفلية).

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"my_analyzer"
        }
     ],
     "analyzers":[
        {
           "name":"my_analyzer",
           "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
           "charFilters":[
              "map_dash",
              "remove_whitespace"
           ],
           "tokenizer":"my_standard_tokenizer",
           "tokenFilters":[
              "my_asciifolding",
              "lowercase"
           ]
        }
     ],
     "charFilters":[
        {
           "name":"map_dash",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["-=>_"]
        },
        {
           "name":"remove_whitespace",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["\\u0020=>"]
        }
     ],
     "tokenizers":[
        {
           "name":"my_standard_tokenizer",
           "@odata.type":"#Microsoft.Azure.Search.StandardTokenizerV2",
           "maxTokenLength":20
        }
     ],
     "tokenFilters":[
        {
           "name":"my_asciifolding",
           "@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
           "preserveOriginal":true
        }
     ]
  }

مثال على تعيين محلل لكل حقل

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

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

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text1",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"pattern"
        },
        {
           "name":"text2",
           "type":"Edm.String",
           "searchable":true
        }
     ]
  }

خلط محللات عمليات الفهرسة والبحث

تتضمن واجهات برمجة التطبيقات سمات فهرس إضافية لتحديد محللات مختلفة للفهرسة والبحث. يجب تحديد سمات searchAnalyzer و indexAnalyzer كزوج، لتحل محل سمة محلل واحد.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "indexAnalyzer":"whitespace",
           "searchAnalyzer":"simple"
        },
     ],
  }

مثال على محلل اللغة

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

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false
        },
        {
           "name":"text",
           "type":"Edm.String",
           "searchable":true,
           "indexAnalyzer":"whitespace",
           "searchAnalyzer":"simple"
        },
        {
           "name":"text_fr",
           "type":"Edm.String",
           "searchable":true,
           "analyzer":"fr.lucene"
        }
     ],
  }

أمثلة على C #

إذا كنت تستخدم نماذج التعليمات البرمجية .NET SDK، يمكنك إلحاق هذه الأمثلة لاستخدام أو تكوين أجهزة التحليل.

تعيين محلل لغة

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

يتم استخدام محللات اللغة كما هي. لاستخدامها، اتصل ب LexicalAnalyzer، مع تحديد نوع LexicalAnalyzerName الذي يوفر محلل نص مدعوما في البحث المعرفي في Azure.

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

    public partial class Hotel
    {
       . . . 
        [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.EnLucene)]
        public string Description { get; set; }

        [SearchableField(AnalyzerName = LexicalAnalyzerName.Values.FrLucene)]
        [JsonPropertyName("Description_fr")]
        public string DescriptionFr { get; set; }

        [SearchableField(AnalyzerName = "url-analyze")]
        public string Url { get; set; }
      . . .
    }

تعريف محلل مخصص

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

إنشاء كائن CustomAnalyzer . المحلل المخصص هو مزيج معرف من قبل المستخدم من رمز مميز معروف ومرشح رمز مميز صفر أو أكثر وصفر أو أكثر من أسماء مرشحات الأحرف:

ينشئ المثال التالي محللا مخصصا باسم "url-analyze" يستخدم الرمز المميز uax_url_emailوعامل تصفية الرمز المميز للأحرف الصغيرة.

private static void CreateIndex(string indexName, SearchIndexClient adminClient)
{
   FieldBuilder fieldBuilder = new FieldBuilder();
   var searchFields = fieldBuilder.Build(typeof(Hotel));

   var analyzer = new CustomAnalyzer("url-analyze", "uax_url_email")
   {
         TokenFilters = { TokenFilterName.Lowercase }
   };

   var definition = new SearchIndex(indexName, searchFields);

   definition.Analyzers.Add(analyzer);

   adminClient.CreateOrUpdateIndex(definition);
}

لمزيد من الأمثلة، راجع CustomAnalyzerTests.cs.

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

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

لمعرفة المزيد حول أجهزة التحليل، راجع المقالات التالية: