Tutorial: Mengekstrak, memotong, dan menyematkan konten multimodal

Dalam tutorial ini, Anda akan membangun alur pengindeks multimodal yang melakukan tugas-tugas ini:

  • Mengekstrak dan memotong teks dan gambar
  • Vektorisasi teks dan gambar untuk pencarian kesamaan
  • Mengirim gambar yang dipotong ke penyimpanan pengetahuan untuk diambil oleh aplikasi Anda

Tutorial ini menunjukkan beberapa set keterampilan secara berdampingan untuk mengilustrasikan berbagai cara untuk mengekstrak, memotong, dan mem-vektorisasi konten multimodal.

Prasyarat

Pengindeksan multimodal diimplementasikan melalui keterampilan yang memanggil model AI dan API dalam alur pengindeks. Prasyarat model bervariasi tergantung pada keterampilan yang dipilih untuk setiap tugas.

Tip

Untuk menyelesaikan tutorial ini pada tingkat gratis, gunakan dokumen yang lebih kecil dengan lebih sedikit gambar. Tutorial ini hanya menggunakan model Foundry, tetapi Anda dapat membuat keterampilan kustom untuk menggunakan model lain.

Mengonfigurasi akses

Sebelum memulai, pastikan Anda memiliki izin untuk mengakses konten dan operasi di Pencarian Azure AI. Panduan memulai cepat ini menggunakan Microsoft Entra ID untuk autentikasi dan akses berbasis peran untuk otorisasi. Anda harus menjadi Pemilik atau Administrator Akses Pengguna untuk menetapkan peran. Jika fungsi peran tidak dapat digunakan, gunakan autentikasi berbasis kunci sebagai gantinya.

Untuk mengonfigurasi akses berbasis peran yang direkomendasikan:

  1. Aktifkan akses berbasis peran untuk layanan pencarian Anda.

  2. Tetapkan peran berikut ke akun pengguna Anda.

    • Kontributor Layanan Pencarian

    • Kontributor Data Indeks Pencarian

    • Pembaca Data Indeks Pencarian

Dapatkan titik akhir

Setiap layanan Pencarian Azure AI memiliki titik akhir, yang merupakan URL unik yang mengidentifikasi dan menyediakan akses jaringan ke layanan. Di bagian selanjutnya, Anda menentukan titik akhir ini untuk menyambungkan ke layanan pencarian Anda secara terprogram.

Untuk mendapatkan titik akhir:

  1. Buka layanan pencarian Anda di portal Microsoft Azure.

  2. Dari panel kiri, pilih Gambaran Umum.

  3. Catat titik akhir, yang akan terlihat seperti https://my-service.search.windows.net.

Siapkan data

Data sampel adalah dokumen PDF 36 halaman yang menggabungkan konten visual kaya, seperti bagan, infografis, dan halaman yang dipindai, dengan teks asli. Azure Storage menyediakan data sampel dan menghosting penyimpanan pengetahuan. Identitas terkelola dari layanan pencarian membutuhkan:

  • Baca akses ke Azure Storage untuk mengambil data sampel.

  • Menulis akses untuk membuat penyimpanan pengetahuan. Layanan pencarian membuat kontainer untuk gambar yang dipotong selama pemrosesan skillset, menggunakan nama yang Anda berikan dalam variabel lingkungan.

Ikuti langkah-langkah ini untuk menyiapkan data sampel.

  1. Unduh sampel PDF berikut: sustainable-ai-pdf

  2. Masuk ke portal Azure.

  3. Di Azure Storage, buat kontainer baru bernama sustainable-ai-pdf.

  4. Unggah file data sampel.

  5. Tetapkan peran pada layanan pencarian identitas terkelola:

    • Pembaca Blob Data Penyimpanan untuk pengambilan data

    • Kontributor Data Blob Penyimpanan dan Kontributor Data Tabel Penyimpanan untuk membuat penyimpanan pengetahuan.

Saat Anda membuka halaman Azure Storage di portal Microsoft Azure, dapatkan string koneksi untuk variabel lingkungan.

  1. Di bawah Pengaturan>Titik Akhir, pilih titik akhir untuk ID Sumber Daya. Ini akan terlihat mirip dengan contoh berikut: /subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default.

  2. Tambahkan awalan ResourceId= ke string koneksi ini. Gunakan versi ini untuk variabel lingkungan Anda.

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

  3. Untuk koneksi yang dibuat menggunakan identitas terkelola yang ditetapkan pengguna, gunakan string koneksi yang sama dan berikan properti yang identity diatur ke identitas terkelola yang ditetapkan pengguna yang telah ditentukan sebelumnya.

    "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" 
    }
    

Pilih keterampilan untuk pengindeksan multimodal

Definisi indeks, sumber data, dan pengindeks sebagian besar sama untuk semua skenario, tetapi set keterampilan dapat mencakup kombinasi keterampilan yang berbeda tergantung pada bagaimana Anda ingin mengekstrak, memotong, dan mem-vektorisasi teks dan gambar.

  1. Pilih keterampilan untuk ekstraksi dan potongan:

    • Ekstraksi Dokumen, Pemisahan Teks
    • Tata Letak Dokumen
  2. Pilih keterampilan untuk vektorisasi:

    • Perintah GenAI, Penyematan Azure OpenAI
    • Penyematan Multimodal Azure AI Visual

Sebagian besar keterampilan ini bergantung pada model yang disebarkan atau sumber daya Microsoft Foundry. Tabel berikut mengidentifikasi model yang mendukung setiap keterampilan, ditambah sumber daya dan izin yang menyediakan akses model.

Keterampilan Penggunaan Model Sumber Daya Permissions
Keterampilan Ekstraksi Dokumen, Keterampilan Pemisahan Teks Ekstrak dan potong berdasarkan ukuran tetap.
Ekstraksi teks ini gratis.
Ekstraksi gambar dapat ditagih.
Tidak ada (pengaturan default) Pencarian Azure AI Lihat Mengonfigurasi akses
Keterampilan Tata Letak Dokumen Ekstrak dan kelompokkan berdasarkan tata letak dokumen. Inteligensi Dokumen 4.0 Microsoft Foundry Pengguna Cognitive Services
Kemampuan Azure AI Visual Vektorisasi konten teks dan gambar. Azure AI Visual Multimodal 4.0 Microsoft Foundry Pengguna Cognitive Services
Kemampuan GenAI Prompt Panggil LLM untuk menghasilkan deskripsi teks konten gambar. GPT-5 atau GPT-4 Microsoft Foundry Pengguna Cognitive Services
Keterampilan penyematan Azure OpenAI Vektorisasi teks dan deskripsi gambar tekstual yang dihasilkan. Text-embedding-3 atau text-embedding-ada-002 Microsoft Foundry Pengguna Cognitive Services

Penggunaan model dapat ditagih, kecuali untuk ekstraksi teks dan pemisahan teks.

Penyebaran model dapat dilakukan di wilayah yang didukung jika layanan pencarian terhubung melalui titik akhir publik, koneksi privat, atau jika koneksi penagihan tidak memerlukan kunci. Sebagai alternatif, jika koneksi berbasis kunci, lampirkan sumber daya Microsoft Foundry dari wilayah yang sama dengan Pencarian Azure AI.

Atur lingkungan Anda

Untuk tutorial ini, koneksi klien REST lokal Anda ke Pencarian Azure AI memerlukan titik akhir dan kunci API. Anda bisa mendapatkan nilai-nilai ini di portal Microsoft Azure. Untuk metode koneksi lainnya, lihat Menyambungkan ke layanan pencarian.

Untuk koneksi terautentikasi yang terjadi selama pengindeksan dan pemrosesan fungsi keahlian, layanan pencarian menggunakan penetapan peran yang telah Anda tentukan sebelumnya.

  1. Mulai Visual Studio Code dan buat file baru.

  2. Berikan nilai untuk variabel yang digunakan dalam permintaan:

     @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
    

    Untuk @storageConnection, pastikan string koneksi Anda tidak memiliki tanda titik koma atau tanda kutip di akhir. Lihat Menyiapkan data Anda untuk sintaks string koneksi.

    Untuk @imageProjectionContainer, berikan nama kontainer yang unik dalam penyimpanan blob. Pencarian Azure AI membuat kontainer ini selama pemrosesan kemampuan.

    Untuk bantuan mendapatkan token akses, lihat Menyambungkan ke Pencarian Azure AI. Jika Anda tidak dapat menggunakan peran, lihat Menyambungkan dengan kunci.

  3. Tambahkan variabel ini jika Anda menggunakan keterampilan Tata Letak Dokumen atau keterampilan Azure AI Visual (menggunakan model versi 2023-04-15):

    @foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @azureAiVisionModelVersion = 2023-04-15
    
  4. Tambahkan variabel ini jika Anda menggunakan keterampilan GenAI Prompt dan keterampilan Azure OpenAI Embedding:

     @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. Simpan file menggunakan .rest ekstensi file atau .http . Untuk bantuan dengan klien REST, lihat Mulai Cepat: Pencarian teks lengkap menggunakan REST.

Sumber daya Foundry yang sama dapat menyediakan Azure AI Visual, Kecerdasan Dokumen, model penyelesaian obrolan, dan model penyematan teks. Pastikan wilayah mendukung model yang Anda butuhkan. Jika suatu wilayah dalam kapasitas, Anda mungkin perlu membuat sumber daya baru untuk menyebarkan model yang diperlukan.

Menyiapkan alur

Alur pengindeks terdiri dari empat komponen: sumber data, indeks, set keterampilan, dan pengindeks.

Mengunduh file REST

Repositori GitHub azure-search-rest-samples memiliki . File REST yang membuat alur dan mengkueri indeks.

Tip

Lihat repositori GitHub azure-ai-search-multimodal-sample untuk contoh Python.

Membuat sumber data

Buat Sumber Data (REST) membuat koneksi sumber data yang menentukan data apa yang akan diindeks.

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
}

Kirim permintaan. Respons akan terlihat seperti ini:

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
}

Buat indeks

Buat Indeks (REST) membuat indeks di layanan pencarian Anda. Indeks ini mirip di semua set keterampilan, dengan pengecualian berikut:

  • Bagian vectorizers ini menentukan bagaimana teks kueri divektorisasi pada waktu pencarian. Penting untuk menggunakan penyedia penyematan dan keluarga model yang sama yang digunakan oleh skillset (multimodal Azure AI Visual atau penyematan teks Azure OpenAI) sehingga vektor kueri dan vektor terindeks kompatibel.

  • Nilai content_embedding bidang dimensions harus sama persis dengan ukuran vektor yang dihasilkan oleh model penyematan (misalnya, 1024 untuk multimodal Azure AI Visual atau 3072 untuk text-embedding-3-large). Ketidakcocokan dapat menyebabkan kegagalan pengindeksan atau kueri.

  • Untuk jenis kompleks, nama bidang berlapis dalam indeks harus sama persis dengan nama output pengayaan (termasuk casing). Pencarian Azure AI tidak dapat memetakan subbidang bertingkat ke nama yang berbeda. Gunakan location_metadata, bounding_polygons, dan page_number untuk bidang yang menerima output Pemisahan Teks, dan locationMetadata, boundingPolygons, dan pageNumber untuk bidang yang menerima output Tata Letak Dokumen.

Berikut adalah definisi indeks untuk setiap kombinasi keterampilan.

Pola ini menggunakan:

{
   "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":[
                  
               ]
            }
         }
      ]
   }
}

Poin utama:

  • content_embedding adalah satu-satunya bidang vektor dan menyimpan vektor untuk konten teks dan gambar. Ini harus dikonfigurasi dengan dimensi yang sesuai untuk model penyematan, seperti 3072 untuk penyematan teks-3-besar, serta profil pencarian vektor.

  • content_path adalah jalur setiap gambar di penyimpanan pengetahuan.

  • location_metadata atau locationMetadata menangkap metadata poligon pembatas dan nomor halaman untuk setiap gambar yang dinormalisasi, memungkinkan pencarian spasial yang tepat atau overlay UI. Nama bidang bervariasi berdasarkan bagaimana informasi diekstrak.

  • Untuk ekstraksi konten berdasarkan keterampilan Pemisahan Teks: metadata lokasi hanya didukung untuk file PDF. Selain itu, untuk keterampilan Pemisahan Teks, Anda harus menyertakan keterampilan Shaper untuk menangkap metadata lokasi dalam memori dan mewakilinya di pohon dokumen. Kemampuan Shaper juga bertanggung jawab untuk menambah nama kontainer pengetahuan ke content_path.

Membuat kumpulan keterampilan untuk ekstraksi, pengelompokan, dan vektorisasi

Buat Skillset (REST) membuat set keterampilan di layanan pencarian Anda. Set keterampilan mendefinisikan operasi yang mengekstrak, memotong, dan mem-vektorisasi konten sebelum pengindeksan.

Ada empat pola keterampilan. Masing-masing menunjukkan strategi ekstraksi dan potongan, dipasangkan dengan strategi vektorisasi. Ada dua perbedaan utama dalam setiap pola: komposisi keterampilan dan indexProjections. Proyeksi bervariasi berdasarkan output dari setiap keterampilan penyematan.

Keempat pola tersebut mencakup kemampuan Shaper. Output dari fitur Shaper menciptakan jalur gambar yang dinormalisasi di penyimpanan pengetahuan dan metadata lokasi (nomor halaman dan poligon pembatas).

Pola ini menggunakan:

{
   "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/*"
               }
            ]
         }
      ]
   }
}

Jalankan pemberi indeks

Buat Pengindeks membuat pengindeks di layanan pencarian Anda. Pengindeks tersambung ke sumber data, memuat data, menjalankan set keterampilan, dan mengindeks konten yang diperkaya.

### 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": []
}

Jalankan kueri

Anda dapat mulai mencari segera setelah dokumen pertama dimuat. Ini adalah kueri pencarian teks lengkap yang tidak ditentukan yang mengembalikan semua bidang yang ditandai sebagai dapat diambil dalam indeks, bersama dengan jumlah dokumen.

Tip

Bidang content_embedding berisi lebih dari seribu dimensi. select Gunakan pernyataan untuk mengecualikan bidang tersebut dari respons dengan secara eksplisit memilih semua bidang lainnya. Sesuaikan pernyataan pilih agar sesuai dengan bidang (location_metadata vs locationMetadata) di indeks Anda. Berikut adalah contohnya: "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
  }

Kirim permintaan. Respons akan terlihat seperti ini:

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 dokumen dikembalikan dalam respons.

Kueri untuk konten khusus gambar

Gunakan filter untuk mengecualikan semua konten non-gambar. Parameter $filter hanya berfungsi pada bidang yang ditandai dapat difilter selama pembuatan indeks.

Untuk filter, Anda juga dapat menggunakan operator logis (dan, atau, tidak) dan operator perbandingan (eq, ne, gt, lt, ge, le). Perbandingan string tidak peka huruf besar/kecil. Untuk informasi dan contoh selengkapnya, lihat Contoh kueri pencarian sederhana.

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"
  }

Hasil pencarian yang berisi konten khusus gambar tidak memiliki konten teks, sehingga Anda dapat mengecualikan bidang teks.

Bidang content_embedding berisi vektor berdimensi tinggi (biasanya 1.000 hingga 3.000 dimensi) untuk teks halaman dan deskripsi gambar yang telah diverbalisasi. Kecualikan bidang ini dari kueri.

Bidang content_path berisi jalur relatif ke file gambar dalam kontainer proyeksi gambar yang ditunjuk. Bidang ini dihasilkan hanya untuk gambar yang diekstrak dari PDF ketika imageAction diatur ke generateNormalizedImages, dan dapat dipetakan dari dokumen yang diperkaya dari bidang sumber /document/normalized_images/*/imagePath.

Untuk konteks PDF yang diekstrak menggunakan keterampilan Pemisahan Teks, keterampilan Shaper menambahkan nama kontainer ke jalur dan metadata lokasi.

Kueri untuk teks atau gambar dengan konten yang terkait dengan energi, mengembalikan ID konten, dokumen induk, dan teks (hanya diisi untuk potongan teks), dan jalur konten tempat gambar disimpan di penyimpanan pengetahuan (hanya diisi untuk gambar).

Kueri ini hanya pencarian teks lengkap, tetapi Anda bisa mengkueri bidang vektor untuk pencarian kesamaan.

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
  }

Atur ulang dan jalankan ulang

Pengindeks dapat diatur ulang untuk menghapus tanda air tinggi, yang memungkinkan pembangunan ulang penuh. Permintaan POST berikut adalah untuk reset, diikuti dengan jalankan ulang.

### 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}}

Melihat gambar di penyimpanan pengetahuan

Ingat bahwa kumpulan keterampilan dalam tutorial ini membuat penyimpanan pengetahuan untuk konten gambar yang diekstrak dari PDF. Setelah pengindeks berjalan, kontainer sustainable-ai-pdf-images harus memiliki sekitar 23 gambar.

Anda tidak dapat mengembalikan gambar ini dalam kueri pencarian. Namun, Anda dapat menulis kode aplikasi yang memanggil API Azure Storage untuk mengambil gambar jika Anda membutuhkannya untuk pengalaman pengguna. Bidang content_path memiliki jalur ke setiap gambar.

Untuk melihat gambar di Browser Penyimpanan:

  1. Masuk ke portal Microsoft Azure dan navigasikan ke akun Storage Anda.

  2. Di Penjelajah Penyimpanan, perluas kontainer sustainable-ai-pdf-images.

  3. Pilih gambar.

  4. Di menu paling kanan (...), pilih Tampilkan/Edit.

Cuplikan layar gambar yang diekstrak dari dokumen PDF.

Membersihkan sumber daya

Saat Anda bekerja di langganan Anda sendiri, ada baiknya untuk menyelesaikan proyek dengan menghapus sumber daya yang tidak lagi Anda butuhkan. Sumber daya yang dibiarkan berjalan dapat dikenakan biaya.

Di portal Microsoft Azure, pilih Semua sumber daya atau Grup sumber daya dari panel kiri untuk menemukan dan mengelola sumber daya. Anda dapat menghapus sumber daya satu per satu atau menghapus grup sumber daya untuk menghapus semua sumber daya sekaligus.