Condividi tramite


Esercitazione: Estrarre, suddividere e incorporare contenuto multimodale

In questa esercitazione si creerà una pipeline dell'indicizzatore multifunzionale che esegue queste attività:

  • Estrarre e suddividere testo e immagini
  • Vettorizzare testo e immagini per la ricerca di somiglianza
  • Invia immagini ritagliate a un archivio di conoscenze per il recupero dall'app

Questo tutorial mostra più set di competenze affiancati per illustrare diversi modi per estrarre, suddividere in blocchi e vettorizzare il contenuto multimodale.

Prerequisiti

L'indicizzazione multimodale viene implementata tramite funzioni che chiamano modelli di AI e API in una catena di indicizzazione. I prerequisiti del modello variano a seconda delle competenze scelte per ogni attività.

Suggerimento

Per completare questa esercitazione sul livello gratuito, usare un documento più piccolo con un minor numero di immagini. Questa esercitazione usa solo i modelli Foundry, ma è possibile creare competenze personalizzate per l'uso di altri modelli.

Configurare l'accesso

Prima di iniziare, assicurarsi di avere le autorizzazioni per accedere al contenuto e alle operazioni in Ricerca di intelligenza artificiale di Azure. Questa guida introduttiva utilizza Microsoft Entra ID per l'autenticazione e la gestione delle autorizzazioni basata sui ruoli. Per assegnare i ruoli, è necessario essere proprietario o amministratore accesso utenti . Se i ruoli non sono fattibili, usare invece l'autenticazione basata su chiave.

Per configurare l'accesso basato sui ruoli consigliato:

  1. Abilitare l'accesso in base al ruolo per il servizio di ricerca.

  2. Assegnare i ruoli seguenti all'account utente.

    • Collaboratore servizi di ricerca

    • Collaboratore ai dati dell'indice di ricerca

    • Lettore di dati dell'indice di ricerca

Ottenere l'endpoint

Ogni servizio ricerca di intelligenza artificiale di Azure ha un endpoint, ovvero un URL univoco che identifica e fornisce l'accesso alla rete al servizio. In una sezione successiva si specifica questo endpoint per connettersi al servizio di ricerca tramite programmazione.

Per ottenere l'endpoint:

  1. Accedere al portale di Azure e selezionare il servizio di ricerca.

  2. Nel riquadro sinistro selezionare Panoramica.

  3. Prendere nota dell'endpoint, che dovrebbe essere simile a https://my-service.search.windows.NET.

Preparazione dei dati

I dati di esempio sono un documento PDF a 36 pagine che combina contenuti visivi avanzati, ad esempio grafici, infografiche e pagine analizzate, con testo originale. Archiviazione di Azure fornisce i dati di esempio e ospita l'archivio conoscenze. È necessaria un'identità gestita per il servizio di ricerca.

  • Accesso in lettura ad Archiviazione di Azure per recuperare i dati di esempio.

  • Accesso in scrittura per creare l'archivio conoscenze. Il servizio di ricerca crea il contenitore per le immagini ritagliate durante l'elaborazione del set di competenze, usando il nome specificato in una variabile di ambiente.

Seguire questa procedura per configurare i dati di esempio.

  1. Scaricare il pdf di esempio seguente: sustainable-ai-pdf

  2. Accedi al portale di Azure.

  3. In Archiviazione di Azure creare un nuovo contenitore denominato sustainable-ai-pdf.

  4. Caricare il file di dati di esempio.

  5. Assegnare ruoli all'identità gestita del servizio di ricerca:

    • Lettore di dati BLOB di archiviazione per il recupero dei dati

    • Collaboratore ai dati dei BLOB di archiviazione e Collaboratore ai dati della tabella di archiviazione per la creazione dell'archivio conoscenze.

Mentre le pagine di Archiviazione di Azure sono aperte nel portale di Azure, ottenete una stringa di connessione per la variabile di ambiente.

  1. In Impostazioni>Endpoint, selezionare l'endpoint per l'ID risorsa. Dovrebbe essere simile all'esempio seguente: /subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/rg-mydemo/providers/Microsoft.Storage/storageAccounts/mydemostorage/blobServices/default.

  2. ResourceId= Prefisso di questa stringa di connessione. Usare questa versione per la variabile di ambiente.

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

  3. Per le connessioni effettuate usando un'identità gestita assegnata dall'utente, usare la stessa stringa di connessione e fornire una identity proprietà impostata su un'identità gestita assegnata dall'utente predefinita.

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

Scegliere le competenze per l'indicizzazione multimodale

Le definizioni dell'indice, dell'origine dati e dell'indicizzatore sono per lo più uguali per tutti gli scenari, ma il set di competenze può includere una combinazione di competenze diversa a seconda della modalità di estrazione, blocco e vettorizzazione di testo e immagini.

  1. Scegliere le competenze per l'estrazione e la suddivisione in blocchi:

    • Estrazione documenti, divisione testo
    • Layout del documento
  2. Scegliere le competenze per la vettorializzazione:

    • Prompt genAI, incorporamento di Azure OpenAI
    • Visione di Azure AI Incorporamento Multimodale

La maggior parte di queste competenze dipende da un modello distribuito o da una risorsa Microsoft Foundry. La tabella seguente identifica il modello che esegue il backup di ogni competenza, oltre alla risorsa e alle autorizzazioni che forniscono l'accesso al modello.

Competenza Usage Modello Risorsa Permissions
Competenza Estrazione documenti, competenza Suddivisione testo Estrarre e suddividere in base alle dimensioni fisse.
L'estrazione del testo è libera.
L'estrazione delle immagini è fatturabile.
Nessuno (predefinito) Ricerca di intelligenza artificiale di Azure Consulta Configurare l'accesso
Competenza per il Layout di Documenti Estrarre e suddividere in blocchi in base al layout del documento. Document Intelligence 4.0 Microsoft Foundry Utente di Servizi cognitivi
Competenza di Visione artificiale di Azure Vettorizza il contenuto di testo e immagine. Visione AI Multimodale di Azure 4.0 Microsoft Foundry Utente di Servizi cognitivi
Richiesta di competenza GenAI Chiamare un LLM per generare descrizioni di testo del contenuto dell'immagine. GPT-5 o GPT-4 Microsoft Foundry Utente di Servizi cognitivi
Competenza di incorporamento di Azure OpenAI Vettorizza testo e descrizioni di immagini testuali generate. Text-embedding-3 o text-embedding-ada-002 Microsoft Foundry Utente di Servizi cognitivi

L'utilizzo del modello è fatturabile, ad eccezione dell'estrazione del testo e della suddivisione del testo.

Le distribuzioni di modelli possono avvenire in qualsiasi area supportata se il servizio di ricerca si connette tramite l'endpoint pubblico, una connessione privata o se la connessione di fatturazione è senza chiave. In caso contrario, se la connessione è basata su chiave, collegare una risorsa Microsoft Foundry dalla stessa area di Ricerca di intelligenza artificiale di Azure.

Configurazione dell'ambiente

Per questa esercitazione, la connessione client REST locale a Ricerca intelligenza artificiale di Azure richiede un endpoint e una chiave API. È possibile ottenere questi valori nel portale di Azure. Per altri metodi di connessione, vedere Connettersi a un servizio di ricerca.

Per le connessioni autenticate che si verificano durante l'elaborazione dell'indicizzatore e del set di competenze, il servizio di ricerca usa le assegnazioni di ruolo definite in precedenza.

  1. Avviare Visual Studio Code e creare un nuovo file.

  2. Specificare i valori per le variabili usate nella richiesta:

     @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
    

    Per @storageConnection, assicurarsi che la stringa di connessione non termini con un punto e virgola o con virgolette. Consulta Prepara i dati per la sintassi della stringa di connessione.

    Per @imageProjectionContainerspecificare un nome di contenitore univoco nell'archivio BLOB. Azure AI Search crea questo contenitore durante l'elaborazione delle abilità.

    Per informazioni su come ottenere un token di accesso, vedere Connettersi a Ricerca di intelligenza artificiale di Azure. Se non è possibile usare i ruoli, vedere Connettersi con le chiavi.

  3. Aggiungere questa variabile se si utilizza la competenza Layout documento o la competenza Visione di Azure AI (usare la versione del modello 15/04/2023):

    @foundryUrl = PUT-YOUR-MULTISERVICE-AZURE-AI-FOUNDRY-ENDPOINT-HERE
    @azureAiVisionModelVersion = 2023-04-15
    
  4. Aggiungere queste variabili se si usa la funzionalità Prompt GenAI e la funzionalità di embedding OpenAI di Azure.

     @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. Salvare il file usando un'estensione .rest o .http. Per informazioni sul client REST, vedere Avvio rapido: Ricerca full-text con REST.

La stessa risorsa Foundry può fornire Visione artificiale di Azure, Intelligence sui documenti, un modello di completamento della chat e un modello di incorporamento di testo. Assicurarsi che l'area supporti i modelli necessari. Se un'area raggiunge il limite di capacità, potrebbe essere necessario creare una nuova risorsa per implementare i modelli necessari.

Configurare una pipeline

Una pipeline dell'indicizzatore è costituita da quattro componenti: origine dati, indice, set di competenze e indicizzatore.

Scaricare i file REST

Il repository GitHub azure-search-rest-samples ha file REST che creano la pipeline ed eseguono query sull'indice.

Suggerimento

Per un esempio di Python, vedere il repository GitHub azure-ai-search-multimodal-sample.

Creare un'origine dati

Creare un'origine dati (REST) crea una connessione all'origine dati che specifica i dati da indicizzare.

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
}

Inviare la richiesta. La risposta dovrebbe essere simile alla seguente:

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
}

Creare un indice

Creare un indice (REST) crea un indice nel servizio di ricerca. L'indice è simile in tutti i set di competenze, con le eccezioni seguenti:

  • La sezione definisce il modo in cui il testo della vectorizers query viene vettorializzato in fase di ricerca. Deve usare lo stesso provider di incorporamento e la stessa famiglia di modelli usata dal skillset (Visione di Azure AI multimodal o Azure OpenAI text embedding) in modo che i vettori di query e i vettori indicizzati siano compatibili.

  • Il valore del content_embedding campo dimensions deve corrispondere esattamente alla dimensione del vettore prodotto dal modello di embedding (ad esempio, 1024 per Visione di Azure AI multimodale o 3072 per text-embedding-3-large). Una mancata corrispondenza può causare errori di indicizzazione o query.

  • Per i tipi complessi, i nomi di campo annidati nell'indice devono corrispondere esattamente ai nomi di output dei processi di arricchimento (comprese le differenze tra maiuscole e minuscole). La ricerca AI di Azure non può mappare i sottocampi annidati a nomi diversi. Usare location_metadata, bounding_polygonse page_number per i campi che accettano output di divisione testo e locationMetadata, boundingPolygonse pageNumber per i campi che accettano output di Layout documento.

Ecco le definizioni di indice per ogni combinazione di competenze.

Questo modello usa:

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

Punti chiave:

  • content_embedding è l'unico campo vettoriale e archivia i vettori sia per il contenuto di testo che per quello dell'immagine. Deve essere configurato con dimensioni appropriate per il modello di incorporamento, ad esempio 3072 per text-embedding-3-large e un profilo di ricerca vettoriale.

  • content_path è il percorso di ogni immagine nell'archivio conoscenze.

  • location_metadata o locationMetadata acquisisce i metadati del poligono di delimitazione e del numero di pagina per ogni immagine normalizzata, consentendo ricerche spaziali precise o sovrapposizioni dell'interfaccia utente. I nomi dei campi variano in base alla modalità di estrazione delle informazioni.

  • Per l'estrazione di contenuto in base alla funzionalità di suddivisione del testo, i metadati di localizzazione sono supportati solo per i file PDF. Inoltre, per la competenza Divisione testo, dovreste includere una competenza Shaper per acquisire i metadati della posizione in memoria e rappresentarli nell'albero del documento. La competenza Shaper è anche responsabile dell'aggiunta del nome del contenitore dell'archivio conoscenze nel content_path.

Creare un set di competenze per l'estrazione, la suddivisione in blocchi e la vettorializzazione

Creare un set di competenze (REST) crea un set di competenze nel servizio di ricerca. Un set di competenze definisce le operazioni che estraggono, blocchi e vettorizzano il contenuto prima dell'indicizzazione.

Esistono quattro modelli di set di competenze. Ognuno di essi illustra una strategia di estrazione e suddivisione in blocchi, abbinata a una strategia di vettorizzazione. Esistono due differenze principali in ogni modello: la composizione del set di competenze e indexProjections. Le proiezioni variano in base agli output di ogni abilità di embedding.

Tutti e quattro i modelli includono la competenza Shaper. L'output della competenza Shaper crea il percorso delle immagini normalizzato nell'archivio conoscenze e nei metadati di posizione (numero di pagina e poligoni limite).

Questo modello usa:

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

Eseguire l'indicizzatore

Creare un indicizzatore crea un indicizzatore nel servizio di ricerca. Un indicizzatore si connette all'origine dati, carica i dati, esegue un set di competenze e indicizza il contenuto arricchito.

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

Eseguire le query

È possibile iniziare a eseguire ricerche subito dopo aver caricato il primo documento. Si tratta di una query di ricerca full-text non specificata che restituisce tutti i campi contrassegnati come recuperabili nell'indice, insieme a un conteggio dei documenti.

Suggerimento

Il content_embedding campo contiene più di mille dimensioni. Usare un'istruzione select per escludere tale campo dalla risposta scegliendo in modo esplicito tutti gli altri campi. Modificare l'istruzione select in modo che corrisponda ai campi (location_metadata vs locationMetadata) nell'indice. Di seguito è riportato un esempio: "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
  }

Inviare la richiesta. La risposta dovrebbe essere simile alla seguente:

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

Nella risposta vengono restituiti 100 documenti.

Query per contenuti esclusivamente di immagini

Usare un filtro per escludere tutto il contenuto non immagine. Il $filter parametro funziona solo sui campi contrassegnati come filtrabili durante la creazione dell'indice.

Per i filtri, è anche possibile usare operatori logici (e, o no) e operatori di confronto (eq, ne, gt, lt, ge, le). Per i confronti tra stringhe viene fatta distinzione tra maiuscole e minuscole. Per altre informazioni ed esempi, vedere Esempi di query di ricerca semplici.

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

I risultati della ricerca contenenti contenuto di sola immagine non hanno contenuto di testo, quindi è possibile escludere i campi di testo.

Il content_embedding campo contiene vettori ad alta dimensione (in genere da 1.000 a 3.000 dimensioni) sia per il testo della pagina che per le descrizioni di immagini verbalizzate. Escludere questo campo dalla query.

Il content_path campo contiene il percorso relativo del file di immagine all'interno del contenitore di proiezione di immagini designato. Questo campo viene generato solo per le immagini estratte dai PDF quando imageAction è impostato su generateNormalizedImagese può essere mappato dal documento arricchito dal campo di origine /document/normalized_images/*/imagePath.

Per il contesto PDF estratto usando l'abilità di suddivisione del testo, l'abilità Shaper aggiunge il nome del contenitore al percorso e ai metadati di localizzazione.

Eseguire una query per testo o immagini con contenuto correlato all'energia, restituendo l'ID contenuto, il documento padre e il testo (popolato solo per blocchi di testo) e il percorso del contenuto in cui l'immagine viene salvata nell'archivio conoscenze (popolata solo per le immagini).

Questa query è solo ricerca full-text, ma è possibile eseguire una query sul campo vettore per cercare la ricerca di somiglianza.

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
  }

Reimpostare ed eseguire di nuovo

Gli indicizzatori possono essere reimpostati per cancellare il punto alto, il che consente una ricostruzione completa. Le richieste POST seguenti sono per il reset, seguite dal riavvio.

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

Visualizzare le immagini nell'archivio conoscenze

Tenere presente che l'insieme di competenze in questa esercitazione crea un archivio conoscenze per il contenuto dell'immagine estratto dal PDF. Dopo l'esecuzione dell'indicizzatore, il contenitore sustainable-ai-pdf-images deve avere circa 23 immagini.

Non è possibile restituire queste immagini in una query di ricerca. Tuttavia, è possibile scrivere codice dell'applicazione che chiama le API di Archiviazione di Azure per recuperare le immagini, se necessario per l'esperienza utente. Il content_path campo ha il percorso di ogni immagine.

Per visualizzare le immagini nel browser di archiviazione:

  1. Accedere al portale di Azure e passare all'account di archiviazione.

  2. Nel browser di archiviazione, espandi il contenitore sustainable-ai-pdf-images.

  3. Selezionare un'immagine.

  4. Nel menu all'estrema destra (...) selezionare Visualizza/Modifica.

Screenshot di un'immagine estratta dal documento PDF.

Pulire le risorse

Quando si lavora nella propria sottoscrizione, è consigliabile completare un progetto rimuovendo le risorse non più necessarie. Le risorse lasciate in esecuzione possono avere un costo.

Nel portale di Azure selezionare Tutte le risorse o Gruppidi risorse nel riquadro sinistro per trovare e gestire le risorse. È possibile eliminare le risorse singolarmente o eliminare il gruppo di risorse per rimuovere tutte le risorse contemporaneamente.