البحث الجزئي عن المصطلحات والأنماط ذات الأحرف الخاصة (الواصلات ، أحرف البدل ، regex ، الأنماط)

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

يمكن أن تكون المصطلحات الجزئية والأحرف الخاصة مشكلة إذا لم يكن الفهرس يحتوي على رموز مميزة بالتنسيق المتوقع. خلال مرحلة التحليل المعجمي للفهرسة (بافتراض المحلل القياسي الافتراضي) ، يتم تجاهل الأحرف الخاصة ، ويتم تقسيم الكلمات المركبة ، ويتم حذف المسافة البيضاء ؛ كل ذلك يمكن أن يتسبب في فشل الاستعلامات عند عدم العثور على تطابق. على سبيل المثال، لن يظهر رقم هاتف مثل +1 (425) 703-6214 (رمزي باسم "1"، ، ، "6214""425""703") في استعلام لأن هذا المحتوى غير موجود بالفعل في "3-62" الفهرس.

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

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

تلميح

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

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

  • يمكن أن تكون استعلامات التعبير العادية أي تعبير عادي صالح ضمن Apache Lucene.

  • يشير مشغلو أحرف البدل الذين لديهم مطابقة بادئة إلى نمط معترف به بشكل عام يتضمن بداية المصطلح ، متبوعا بمشغلي * أو لاحقة ، مثل search=cap* المطابقة على "Cap'n Jack's Waterfront Inn" أو ? "Gacc Capital". يتم دعم مطابقة البادئة في كل من بناء جملة استعلام Lucene البسيط والكامل.

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

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

ملاحظة

عندما تتضمن سلسلة استعلام جزئية أحرفا، مثل الشرطة المائلة في جزء عنوان URL، قد تحتاج إلى إضافة أحرف هروب. في JSON ، يتم الهروب من شرطة مائلة للأمام بشرطة مائلة /\للخلف . على هذا النحو ، search=/.*microsoft.com\/azure\/.*/ هو بناء جملة جزء عنوان URL "microsoft.com/azure/".

حل مشاكل البحث الجزئي / النمط

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

  1. تعريف حقل ثان لتخزين إصدار سليم من السلسلة (على افتراض أنك تريد تحليلا وغير محللا للنص في وقت الاستعلام)
  2. تقييم واختيار من بين مختلف المحللين التي تنبعث منها الرموز على المستوى الصحيح من الدقة
  3. تعيين المحلل إلى الحقل
  4. بناء الفهرس واختباره

تلميح

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

1 - إنشاء حقل مخصص

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

{
  "name": "featureCode",
  "type": "Edm.String",
  "retrievable": true,
  "searchable": true,
  "analyzer": null
},
{
  "name": "featureCodeRegex",
  "type": "Edm.String",
  "retrievable": true,
  "searchable": true,
  "analyzer": "my_custom_analyzer"
},

2 - تعيين محلل

عند اختيار محلل ينتج رموزا كاملة الأجل ، فإن المحللين التاليين هم خيارات شائعة:

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

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

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

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

  1. أولا، تحقق من المحلل القياسي لمعرفة كيفية ترميز المصطلحات افتراضيا.

    {
    "text": "SVP10-NOR-00",
    "analyzer": "standard"
    }
    
  2. قم بتقييم الاستجابة لمعرفة كيفية ترميز النص داخل الفهرس. لاحظ كيف يتم تقليل كل مصطلح بأحرف صغيرة ، وإزالة الواصلات ، وتقسيم السلاسل الفرعية إلى رموز مميزة. فقط تلك الاستعلامات التي تتطابق على هذه الرموز المميزة ستعرض هذا المستند في النتائج. سيفشل استعلام يتضمن "10-NOR".

    {
        "tokens": [
            {
                "token": "svp10",
                "startOffset": 0,
                "endOffset": 5,
                "position": 0
            },
            {
                "token": "nor",
                "startOffset": 6,
                "endOffset": 9,
                "position": 1
            },
            {
                "token": "00",
                "startOffset": 10,
                "endOffset": 12,
                "position": 2
            }
        ]
    }
    
  3. الآن قم بتعديل الطلب لاستخدام أو keyword المحللwhitespace:

    {
    "text": "SVP10-NOR-00",
    "analyzer": "keyword"
    }
    
  4. الآن تتكون الاستجابة من رمز مميز واحد ، بأحرف كبيرة ، مع الحفاظ على الشرطات كجزء من السلسلة. إذا كنت بحاجة إلى البحث على نمط أو مصطلح جزئي مثل "10-NOR" ، فإن محرك الاستعلام لديه الآن الأساس للعثور على تطابق.

    {
    
        "tokens": [
            {
                "token": "SVP10-NOR-00",
                "startOffset": 0,
                "endOffset": 12,
                "position": 0
            }
        ]
    }
    

هام

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

3 - تكوين محلل

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

استخدام أجهزة التحليل المدمجة

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

للحصول على سيناريوهات أخرى ولمعرفة المزيد حول أجهزة التحليل المضمنة الأخرى، راجع أجهزة التحليل المضمنة.

    {
      "name": "phoneNumber",
      "type": "Edm.String",
      "key": false,
      "retrievable": true,
      "searchable": true,
      "analyzer": "whitespace"
    }

استخدام أجهزة التحليل المخصصة

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

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

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

يوضح المثال التالي محلل مخصص يوفر رمز الرمز المميز للكلمة الرئيسية ومرشح الرمز المميز بأحرف صغيرة.

{
"fields": [
  {
  "name": "accountNumber",
  "analyzer":"myCustomAnalyzer",
  "type": "Edm.String",
  "searchable": true,
  "filterable": true,
  "retrievable": true,
  "sortable": false,
  "facetable": false
  }
],

"analyzers": [
  {
  "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
  "name":"myCustomAnalyzer",
  "charFilters":[],
  "tokenizer":"keyword_v2",
  "tokenFilters":["lowercase"]
  }
],
"tokenizers":[],
"charFilters": [],
"tokenFilters": []
}

ملاحظة

يعرف keyword_v2 النظام بعامل تصفية الرمز المميز والرمز lowercase المميز ويستخدم تكويناته الافتراضية ، ولهذا السبب يمكنك الرجوع إليهما بالاسم دون الحاجة إلى تعريفهما أولا.

4- البناء والاختبار

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

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

  • يؤدي حذف الفهرس إلى إزالة فهرس موجود يحمل نفس الاسم بحيث يمكنك إعادة إنشائه.

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

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

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

  • يشرح "مستندات البحث" كيفية إنشاء طلب استعلام، باستخدام إما بناء جملة بسيط أو بناء جملةLucene كامل لعبارات أحرف البدل والتعبيرات العادية.

    بالنسبة إلى استعلامات المصطلحات الجزئية، مثل الاستعلام عن "3-6214" للعثور على تطابق على "+1 (425) 703-6214"، يمكنك استخدام بناء الجملة البسيط: search=3-6214&queryType=simple.

    بالنسبة إلى استعلامات الإصلاح واللاحقة، مثل الاستعلام عن "num" أو "numeric" للعثور على تطابق على "alphanumeric"، استخدم بناء جملة Lucene الكامل وتعبيرا عاديا: search=/.*num.*/&queryType=full

ضبط أداء الاستعلام

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

يضيف المثال التالي عامل تصفية EdgeNGramTokenFilter لجعل تطابقات البادئة أسرع. يتم إنشاء رموز مميزة إضافية في مجموعات من 2-25 حرفا تتضمن أحرفا: (ليس فقط MS ، MSF ، MSFT ، MSFT / ، MSFT / S ، MSFT / SQ ، MSFT / SQL).

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

{
"fields": [
  {
  "name": "accountNumber",
  "analyzer":"myCustomAnalyzer",
  "type": "Edm.String",
  "searchable": true,
  "filterable": true,
  "retrievable": true,
  "sortable": false,
  "facetable": false
  }
],

"analyzers": [
  {
  "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
  "name":"myCustomAnalyzer",
  "charFilters":[],
  "tokenizer":"keyword_v2",
  "tokenFilters":["lowercase", "my_edgeNGram"]
  }
],
"tokenizers":[],
"charFilters": [],
"tokenFilters": [
  {
  "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
  "name":"my_edgeNGram",
  "minGram": 2,
  "maxGram": 25,
  "side": "front"
  }
]
}

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

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