الدرس: استخراج وتقسيم وتضمين المحتوى متعدد الوسائط

في هذا الدرس، ستبني خط أنابيب فهرسة متعددة الوسائط يقوم بتنفيذ هذه المهام:

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

يعرض هذا الدرس عدة مهارات جنبا إلى جنب لتوضيح طرق مختلفة لاستخراج وتقسيم وتحويل المحتوى متعدد الوسائط.

المتطلبات المسبقه

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

نصيحة

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

تكوين الوصول

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

لتكوين الوصول الموصى به المستند إلى الدور:

  1. فعل الوصول القائم على الأدوار لخدمة البحث الخاصة بك.

  2. قم بتعيين الأدوار التالية لحساب المستخدم الخاص بك.

    • مساهم خدمة البحث

    • مساهم بيانات فهرس البحث

    • قارئ بيانات فهرس البحث

الحصول على نقطة النهاية

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

للحصول على نقطة النهاية:

  1. انتقل إلى خدمة البحث في مدخل Microsoft Azure.

  2. من الجزء الأيمن، حدد نظرة عامة.

  3. قم بتدوين نقطة النهاية ، والتي يجب أن تبدو كما https://my-service.search.windows.net.

إعداد البيانات

البيانات النموذجية هي مستند PDF مكون من 36 صفحة يجمع بين المحتوى البصري الغني، مثل الرسوم البيانية، والرسوم البيانية، والصفحات الممسوحة ضوئيا، مع النص الأصلي. يوفر تخزين Azure بيانات العينات ويستضيف مخزن المعرفة. خدمة البحث التي تدار الهوية الحكومية:

  • اقرأ الوصول إلى تخزين Azure لاسترجاع بيانات العينة.

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

اتبع هذه الخطوات لإعداد بيانات العينة.

  1. قم بتنزيل نموذج PDF التالي: مستدام-ai-pdf

  2. قم بتسجيل الدخول إلى بوابة Azure.

  3. في تخزين Azure، قم بإنشاء حاوية جديدة تسمى sustainable-ai-pdf.

  4. تحميل نموذج ملف البيانات.

  5. تعيين الأدوار لهوية خدمة البحث المدارة:

    • قارئ بيانات Storage Blob لاسترجاع البيانات

    • مساهم بيانات كتلة التخزينومساهم بيانات جدول التخزين لإنشاء مخزن المعرفة.

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

  1. تحت إعدادات>نقاط النهاية، اختر نقطة النهاية الخاصة بمعرف الموارد. يجب أن يبدو مشابها للمثال التالي: /subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default.

  2. بادئة ResourceId= لهذا السلسلة الاتصالية. استخدم هذا الإصدار لمتغير بيئتك.

    ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default

  3. بالنسبة للاتصالات التي يتم تنفيذها باستخدام هوية مدارة معينة من المستخدم، استخدم نفس سلسلة الاتصال وقدم identity مجموعة خصائص لهوية مدارة محددة مسبقا من قبل المستخدم.

    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/00000000-0000-0000-0000-00000000/resourcegroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MY-DEMO-USER-MANAGED-IDENTITY" 
    }
    

اختر المهارات للفهرسة متعددة الوسائط

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

  1. اختر المهارات للاستخراج والتقسيم:

    • استخراج المستندات، تقسيم النص
    • تصميم المستند
  2. اختيار المهارات للتوجيه:

    • GenAI prompt, Azure OpenAI embbedding
    • الرؤية في الذكاء الاصطناعي في Azure  Multimodal Embedding

تعتمد معظم هذه المهارات على نموذج منشور أو مورد من Microsoft Foundry. يحدد الجدول التالي النموذج الذي يدعم كل مهارة، بالإضافة إلى الموارد والأذونات التي توفر الوصول إلى النموذج.

المهارة الاستخدام Model مورد الأذونات
مهارة استخراج المستندات، مهارة تقسيم النص استخراج وتقسيم القطع بناء على الحجم الثابت.
استخراج النص مجاني.
استخراج الصورة قابل للفوترة.
لا شيء (مدمج) البحث باستخدام الذكاء الاصطناعي في Azure انظر تكوين الوصول
مهارة تخطيط المستند استخرجه وقطعه بناء على تخطيط المستند. استخبارات المستندات 4.0 مايكروسوفت فاوندري مستخدم الخدمات المعرفية
مهارة الرؤية في الذكاء الاصطناعي في Azure  قم بتحويل محتوى النص والصورة إلى متجهات. الرؤية في الذكاء الاصطناعي في Azure  متعدد الوسائط 4.0 مايكروسوفت فاوندري مستخدم الخدمات المعرفية
مهارة موجه GenAI استدعي نموذج اللغة الكبيرة لإنشاء أوصاف نصية لمحتوى الصور. GPT-5 أو GPT-4 مايكروسوفت فاوندري مستخدم الخدمات المعرفية
مهارة تضمين Azure OpenAI قم بتحويل النص ووصف الصور النصية المولدة. نص-تضمين-3 أو نص-تضمين-آدا-002 مايكروسوفت فاوندري مستخدم الخدمات المعرفية

استخدام النموذج قابل للفوترة، باستثناء استخراج النصوص وتقسيم النصوص.

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

إعداد بيئتك

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

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

  1. ابدأ تشغيل تعليمة Visual Studio برمجية وأنشئ ملفا جديدا.

  2. قدم قيما للمتغيرات المستخدمة في الطلب:

     @searchUrl = PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE
     @storageConnection = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE
     @imageProjectionContainer=sustainable-ai-pdf-images
     @token = PUT-YOUR-PERSONAL-IDENTITY-TOKEN HERE
    

    ل @storageConnection، تأكد من أن سلسلة الاتصال الخاصة بك لا تحتوي على فاصلة منقوطة زائدة أو علامات اقتباس. انظر إعداد بياناتك لصياغة سلاسل الاتصال.

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

    للحصول على المساعدة في الحصول على رمز وصول، راجع Connect to البحث باستخدام الذكاء الاصطناعي في Azure. إذا لم تستطع استخدام الأدوار، انظر Connect with keys.

  3. أضف هذا المتغير إذا كنت تستخدم مهارة تخطيط المستندات أو مهارة الرؤية في الذكاء الاصطناعي في Azure  (تستخدم النسخة النموذجية 2023-04-15):

    @foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @azureAiVisionModelVersion = 2023-04-15
    
  4. أضف هذه المتغيرات إذا كنت تستخدم مهارة التوجيه GenAI ومهارة تضمين Azure OpenAI:

     @chatCompletionModelUri = PUT-YOUR-DEPLOYED-MODEL-URI-HERE
     @chatCompletionModelKey = PUT-YOUR-MODEL-KEY-HERE
     @textEmbeddingModelUri = PUT-YOUR-DEPLOYED-MODEL-URI-HERE
     @textEmbeddingModelKey = PUT-YOUR-MODEL-KEY-HERE
    
  5. احفظ الملف باستخدام .rest ملحق ملف أو .http . للحصول على تعليمات حول عميل REST، راجع التشغيل السريع: البحث عن النص الكامل باستخدام REST.

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

قم بإعداد تدفق

يتكون خط أنابيب الفهرس من أربعة مكونات: مصدر البيانات، الفهرس، مجموعة المهارات، والمفهرس.

حمل ملفات REST

مستودع azure-search-rest-samples في GitHub يحتوي على . ملفات REST التي تنشئ خط الأنابيب وتبحث عن الفهرس.

نصيحة

انظر مستودع Azure -ai-search-multimodal-sample على GitHub لمثال على بايثون.

إنشاء مصدر بيانات

إنشاء مصدر بيانات (REST) ينشئ اتصال مصدر بيانات يحدد البيانات التي يجب فهرستها.

POST {{searchUrl}}/datasources?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}

{
   "name":"demo-multimodal-ds",
   "description":null,
   "type":"azureblob",
   "subtype":null,
   "credentials":{
      "connectionString":"{{storageConnection}}"
   },
   "container":{
      "name":"sustainable-ai-pdf",
      "query":null
   },
   "dataChangeDetectionPolicy":null,
   "dataDeletionDetectionPolicy":null,
   "encryptionKey":null,
   "identity":null
}

أرسل الطلب. يجب أن تبدو الاستجابة كما يلي:

HTTP/1.1 201 Created
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Location: https://<YOUR-SEARCH-SERVICE-NAME>.search.windows-int.net:443/datasources('demo-multimodal-ds')?api-version=2025-11-01-preview -Preview
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 4eb8bcc3-27b5-44af-834e-295ed078e8ed
elapsed-time: 346
Date: Sat, 26 Apr 2026 21:25:24 GMT
Connection: close

{
  "name": "demo-multimodal-ds",
  "description": null,
  "type": "azureblob",
  "subtype": null,
  "indexerPermissionOptions": [],
  "credentials": {
    "connectionString": null
  },
  "container": {
    "name": "sustainable-ai-pdf",
    "query": null
  },
  "dataChangeDetectionPolicy": null,
  "dataDeletionDetectionPolicy": null,
  "encryptionKey": null,
  "identity": null
}

إنشاء فهرس

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

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

  • يجب أن content_embedding تتطابق قيمة الحقل dimensions تماما مع حجم المتجه الناتج عن نموذج التضمين (على سبيل المثال، 1024 لنموذج الرؤية في الذكاء الاصطناعي في Azure  متعدد الوسائط أو 3072 ل text-embedding-3-large). يمكن أن يسبب عدم التوافق فشل في الفهرسة أو الاستعلام.

  • بالنسبة للأنواع المعقدة، يجب أن تتطابق أسماء الحقول المتداخلة في الفهرس تماما مع أسماء مخرجات الإثراء (بما في ذلك الأغلاف). لا يمكن ل البحث باستخدام الذكاء الاصطناعي في Azure تعيين الحقول الفرعية المتداخلة بأسماء مختلفة. استخدم location_metadata، ، و bounding_polygons للحقول التي تقبل مخرجات تقسيم النص، و page_number، locationMetadata، و boundingPolygons للحقول التي تقبل مخرجات pageNumberتخطيط المستند.

إليك تعريفات الفهرس لكل تركيبة مهارات.

يستخدم هذا النمط:

{
   "name":"demo-multimodal-1-index",
   "fields":[
      {
         "name":"content_id",
         "type":"Edm.String",
         "retrievable":true,
         "key":true,
         "analyzer":"keyword"
      },
      {
         "name":"text_document_id",
         "type":"Edm.String",
         "searchable":false,
         "filterable":true,
         "retrievable":true,
         "stored":true,
         "sortable":false,
         "facetable":false
      },
      {
         "name":"document_title",
         "type":"Edm.String",
         "searchable":true
      },
      {
         "name":"image_document_id",
         "type":"Edm.String",
         "filterable":true,
         "retrievable":true
      },
      {
         "name":"content_text",
         "type":"Edm.String",
         "searchable":true,
         "retrievable":true
      },
      {
         "name":"content_embedding",
         "type":"Collection(Edm.Single)",
         "dimensions":1024,
         "searchable":true,
         "retrievable":true,
         "vectorSearchProfile":"hnsw"
      },
      {
         "name":"content_path",
         "type":"Edm.String",
         "searchable":false,
         "retrievable":true
      },
      {
         "name":"location_metadata",
         "type":"Edm.ComplexType",
         "fields":[
            {
               "name":"page_number",
               "type":"Edm.Int32",
               "searchable":false,
               "retrievable":true
            },
            {
               "name":"bounding_polygons",
               "type":"Edm.String",
               "searchable":false,
               "retrievable":true,
               "filterable":false,
               "sortable":false,
               "facetable":false
            }
         ]
      }
   ],
   "vectorSearch":{
      "profiles":[
         {
            "name":"hnsw",
            "algorithm":"defaulthnsw",
            "vectorizer":"demo-vectorizer"
         }
      ],
      "algorithms":[
         {
            "name":"defaulthnsw",
            "kind":"hnsw",
            "hnswParameters":{
               "m":4,
               "efConstruction":400,
               "metric":"cosine"
            }
         }
      ],
      "vectorizers":[
         {
            "name":"demo-vectorizer",
            "kind":"aiServicesVision",
            "aiServicesVisionParameters":{
               "resourceUri":"{{foundryUrl}}",
               "authIdentity":null,
               "modelVersion":"{{azureAiVisionModelVersion}}"
            }
         }
      ]
   },
   "semantic":{
      "defaultConfiguration":"semanticconfig",
      "configurations":[
         {
            "name":"semanticconfig",
            "prioritizedFields":{
               "titleField":{
                  "fieldName":"document_title"
               },
               "prioritizedContentFields":[
                  
               ],
               "prioritizedKeywordsFields":[
                  
               ]
            }
         }
      ]
   }
}

النقاط الرئيسية:

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

  • content_path هو مسار كل صورة في مخزن المعرفة.

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

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

أنشئ مجموعة مهارات للاستخراج، والتقسيم، والتقسيس

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

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

تشمل جميع الأنماط الأربعة مهارة الشكل. ينشئ الناتج عن مهارة التشكيل المسار المعياري للصور في مخزن المعرفة وبيانات الموقع (رقم الصفحة والمضلعات المحيطة).

يستخدم هذا النمط:

{
   "name":"demo-multimodal-skillset",
   "description":"A test skillset",
   "skills":[
      {
         "@odata.type":"#Microsoft.Skills.Util.DocumentExtractionSkill",
         "name":"document-extraction-skill",
         "description":"Document extraction skill to extract text and images from documents",
         "parsingMode":"default",
         "dataToExtract":"contentAndMetadata",
         "configuration":{
            "imageAction":"generateNormalizedImages",
            "normalizedImageMaxWidth":2000,
            "normalizedImageMaxHeight":2000
         },
         "context":"/document",
         "inputs":[
            {
               "name":"file_data",
               "source":"/document/file_data"
            }
         ],
         "outputs":[
            {
               "name":"content",
               "targetName":"extracted_content"
            },
            {
               "name":"normalized_images",
               "targetName":"normalized_images"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Text.SplitSkill",
         "name":"split-skill",
         "description":"Split skill to chunk documents",
         "context":"/document",
         "defaultLanguageCode":"en",
         "textSplitMode":"pages",
         "maximumPageLength":2000,
         "pageOverlapLength":200,
         "unit":"characters",
         "inputs":[
            {
               "name":"text",
               "source":"/document/extracted_content",
               "inputs":[
                  
               ]
            }
         ],
         "outputs":[
            {
               "name":"textItems",
               "targetName":"pages"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Vision.VectorizeSkill",
         "name":"text-embedding-skill",
         "description":"Vision Vectorization skill for text",
         "context":"/document/pages/*",
         "modelVersion":"{{azureAiVisionModelVersion}}",
         "inputs":[
            {
               "name":"text",
               "source":"/document/pages/*"
            }
         ],
         "outputs":[
            {
               "name":"vector",
               "targetName":"text_vector"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Vision.VectorizeSkill",
         "name":"image-embedding-skill",
         "description":"Vision Vectorization skill for images",
         "context":"/document/normalized_images/*",
         "modelVersion":"{{azureAiVisionModelVersion}}",
         "inputs":[
            {
               "name":"image",
               "source":"/document/normalized_images/*"
            }
         ],
         "outputs":[
            {
               "name":"vector",
               "targetName":"image_vector"
            }
         ]
      },
      {
         "@odata.type":"#Microsoft.Skills.Util.ShaperSkill",
         "name":"shaper-skill",
         "description":"Shaper skill to reshape the data to fit the index schema",
         "context":"/document/normalized_images/*",
         "inputs":[
            {
               "name":"normalized_images",
               "source":"/document/normalized_images/*",
               "inputs":[
                  
               ]
            },
            {
               "name":"imagePath",
               "source":"='{{imageProjectionContainer}}/'+$(/document/normalized_images/*/imagePath)",
               "inputs":[
                  
               ]
            },
            {
               "name":"dataUri",
               "source":"='data:image/jpeg;base64,'+$(/document/normalized_images/*/data)",
               "inputs":[
                  
               ]
            },
            {
               "name":"location_metadata",
               "sourceContext":"/document/normalized_images/*",
               "inputs":[
                  {
                     "name":"page_number",
                     "source":"/document/normalized_images/*/page_number"
                  },
                  {
                     "name":"bounding_polygons",
                     "source":"/document/normalized_images/*/bounding_polygon"
                  }
               ]
            }
         ],
         "outputs":[
            {
               "name":"output",
               "targetName":"new_normalized_images"
            }
         ]
      }
   ],
   "cognitiveServices":{
      "@odata.type":"#Microsoft.Azure.Search.AIServicesByIdentity",
      "subdomainUrl":"{{foundryUrl}}",
      "identity":null
   },
   "indexProjections":{
      "selectors":[
         {
            "targetIndexName":"demo-multimodal-index",
            "parentKeyFieldName":"text_document_id",
            "sourceContext":"/document/pages/*",
            "mappings":[
               {
                  "name":"content_embedding",
                  "source":"/document/pages/*/text_vector"
               },
               {
                  "name":"content_text",
                  "source":"/document/pages/*"
               },
               {
                  "name":"document_title",
                  "source":"/document/document_title"
               }
            ]
         },
         {
            "targetIndexName":"demo-multimodal-index",
            "parentKeyFieldName":"image_document_id",
            "sourceContext":"/document/normalized_images/*",
            "mappings":[
               {
                  "name":"content_embedding",
                  "source":"/document/normalized_images/*/image_vector"
               },
               {
                  "name":"content_path",
                  "source":"/document/normalized_images/*/new_normalized_images/imagePath"
               },
               {
                  "name":"location_metadata",
                  "source":"/document/normalized_images/*/new_normalized_images/location_metadata"
               },
               {
                  "name":"document_title",
                  "source":"/document/document_title"
               }
            ]
         }
      ],
      "parameters":{
         "projectionMode":"skipIndexingParentDocuments"
      }
   },
   "knowledgeStore":{
      "storageConnectionString":"{{storageConnection}}",
      "identity":null,
      "projections":[
         {
            "files":[
               {
                  "storageContainer":"{{imageProjectionContainer}}",
                  "source":"/document/normalized_images/*"
               }
            ]
         }
      ]
   }
}

تشغيل المفهرس

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

### Create and run an indexer
POST {{searchUrl}}/indexers?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}

{
  "name": "demo-multimodal-indexer",
  "dataSourceName": "demo-multimodal-ds",
  "targetIndexName": "demo-multimodal-index",
  "skillsetName": "demo-multimodal-skillset",
  "parameters": {
    "maxFailedItems": -1,
    "maxFailedItemsPerBatch": 0,
    "batchSize": 1,
    "configuration": {
      "allowSkillsetToReadFileData": true
    }
  },
  "fieldMappings": [
    {
      "sourceFieldName": "metadata_storage_name",
      "targetFieldName": "document_title"
    }
  ],
  "outputFieldMappings": []
}

تفعيل الاستعلامات

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

نصيحة

يحتوي الحقل content_embedding على أكثر من ألف بعد. استخدم عبارة select لاستبعاد ذلك الحقل من الرد عن طريق اختيار جميع الحقول الأخرى بشكل صريح. قم بضبط عبارة الاختيار لتطابق الحقول (location_metadata مقابل locationMetadata) في الفهرس. فيما يلي مثال: "select": "content_id, text_document_id, document_title, image_document_id, content_text,

### Query the index
POST {{searchUrl}}/indexes/demo-multimodal-index/docs/search?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
  
  {
    "search": "*",
    "count": true
  }

أرسل الطلب. يجب أن تبدو الاستجابة كما يلي:

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 712ca003-9493-40f8-a15e-cf719734a805
elapsed-time: 198
Date: Wed, 30 Apr 2025 23:20:53 GMT
Connection: close

{
  "@odata.count": 100,
  "@search.nextPageParameters": {
    "search": "*",
    "count": true,
    "skip": 50
  },
  "value": [
  ],
  "@odata.nextLink": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes/demo-multimodal-index/docs/search?api-version=2025-11-01-preview "
}

يتم إرجاع 100 مستند في الاستجابة.

الاستعلام عن محتوى الصور فقط

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

بالنسبة للمرشحات، يمكنك أيضا استخدام المؤثرات المنطقية (و، أو، لا) ومؤثرات مقارنة (معادل، ne، gt، lt، ge، le). مقارنات السلاسل حساسة لحالة الأحرف. لمزيد من المعلومات والأمثلة، راجع أمثلة استعلامات البحث البسيطة.

POST {{searchUrl}}/indexes/demo-multimodal-index/docs/search?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
  
  {
    "search": "*",
    "count": true,
    "filter": "image_document_id ne null"
  }

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

يحتوي الحقل content_embedding على متجهات عالية الأبعاد (عادة من 1000 إلى 3000 بعد) لكل من نصوص الصفحة ووصف الصور اللفظية. استبعد هذا الحقل من الاستعلام.

يحتوي الحقل content_path على المسار النسبي إلى ملف الصورة داخل حاوية عرض الصورة المخصصة. يتم إنشاء هذا الحقل فقط للصور المستخرجة من ملفات PDF عند imageAction تعيينها إلى generateNormalizedImages، ويمكن تعيينه من المستند الذي تم إثرائه من الحقل /document/normalized_images/*/imagePathالمصدر .

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

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

هذا الاستعلام مخصص فقط للبحث الكامل عن النص، لكن يمكنك الاستعلام من حقل المتجهات للبحث عن التشابه.

POST {{searchUrl}}/indexes/demo-multimodal-index/docs/search?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
  

  {
    "search": "energy",
    "count": true
  }

إعادة تعيين وإعادة تشغيل

يمكن إعادة تعيين الفهرس لتجاوز علامة المياه العالية، مما يسمح بإعادة بناء كاملة. طلبات POST التالية لإعادة التعيين، متبوعة بإعادة التشغيل.

### Reset the indexer
POST {{searchUrl}}/indexers/demo-multimodal-indexer/reset?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
### Run the indexer
POST {{searchUrl}}/indexers/demo-multimodal-indexer/run?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}
### Check indexer status 
GET {{searchUrl}}/indexers/demo-multimodal-indexer/status?api-version=2025-11-01-preview   HTTP/1.1
  Content-Type: application/json
  Authorization: Bearer {{token}}

عرض الصور في مخزن المعرفة

تذكر أن مجموعة المهارات في هذا الدرس تنشئ مخزن معرفة لمحتوى الصور المستخرج من ملف PDF. بعد تشغيل الفهرس، يجب أن تحتوي حاوية الصور المستدامة-ai-pdf على حوالي 23 صورة.

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

لعرض الصور في متصفح التخزين:

  1. سجل الدخول إلى بوابة Azure وانتقل إلى حساب التخزين الخاص بك.

  2. في متصفح التخزين، قم بتوسيع حاوية الصور المستدامة-ai-pdf.

  3. اختر صورة.

  4. في القائمة اليمنى (...)، اختر عرض/تحرير.

لقطة شاشة لصورة مستخرجة من مستند PDF.

تنظيف الموارد

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

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