Creare un indicizzatore in Azure AI Search
Questo articolo è incentrato sui passaggi di base della creazione di un indicizzatore. A seconda dell'origine dati e del flusso di lavoro, potrebbe essere necessaria una configurazione ulteriore.
È possibile usare un indicizzatore per automatizzare l'importazione e l'indicizzazione dei dati in Ricerca di intelligenza artificiale di Azure. Un indicizzatore è un oggetto denominato in un servizio di ricerca che si connette a un'origine dati esterna di Azure, legge i dati e li passa a un motore di ricerca per l'indicizzazione. L'uso degli indicizzatori riduce significativamente la quantità e la complessità del codice che è necessario scrivere se si usa un'origine dati supportata.
Gli indicizzatori supportano due flussi di lavoro:
Indicizzazione basata su testo: estrarre stringhe e metadati dal contenuto testuale per scenari di ricerca full-text.
Indicizzazione basata sulle competenze: usare competenze predefinite o personalizzate che aggiungono l'apprendimento automatico integrato per l'analisi sulle immagini e su contenuti indifferenziati di grandi dimensioni, estrazione o inferenza di testo e struttura. L'indicizzazione basata sulle competenze consente la ricerca su contenuto che non è altrimenti facilmente ricercabile full-text. Per altre informazioni, vedere Arricchimento tramite intelligenza artificiale in Azure AI Search.
Prerequisiti
Un'origine dati supportata che contiene il contenuto da inserire.
Un'origine dati indicizzatore che configura una connessione a dati esterni.
Indice di ricerca che può accettare dati in ingresso.
Essere sotto il limite massimo per il livello di servizio. Il livello Gratuito consente tre oggetti di ogni tipo e 1-3 minuti di elaborazione dell'indicizzatore o 3-10 minuti se è presente un set di competenze.
Modelli dell'indicizzatore
Quando si crea un indicizzatore, la definizione è uno dei due modelli seguenti: indicizzazione basata su testo o indicizzazione basata su competenze. I modelli sono gli stessi, ad eccezione del fatto che l'indicizzazione basata sulle competenze ha più definizioni.
Esempio di indicizzatore per l'indicizzazione basata su testo
L'indicizzazione basata su testo per la ricerca full-text è il caso d'uso principale per gli indicizzatori. Per questo flusso di lavoro, un indicizzatore ha un aspetto simile a questo esempio.
{
"name": (required) String that uniquely identifies the indexer,
"description": (optional),
"dataSourceName": (required) String indicating which existing data source to use,
"targetIndexName": (required) String indicating which existing index to use,
"parameters": {
"batchSize": null,
"maxFailedItems": 0,
"maxFailedItemsPerBatch": 0,
"base64EncodeKeys": false,
"configuration": {}
},
"fieldMappings": (optional) unless field discrepancies need resolution,
"disabled": null,
"schedule": null,
"encryptionKey": null
}
Gli indicizzatori presentano i requisiti seguenti:
- Proprietà
name
che identifica in modo univoco l'indicizzatore nella raccolta dell'indicizzatore - Proprietà
dataSourceName
che punta a un oggetto origine dati. Specifica una connessione a dati esterni - Proprietà
targetIndexName
che punta all'indice di ricerca di destinazione
Altri parametri sono facoltativi e modificano i comportamenti di runtime, ad esempio il numero di errori da accettare prima di considerare come non riuscito l'intero processo. I parametri obbligatori vengono specificati in tutti gli indicizzatori e sono documentati nel riferimento all'API REST.
Gli indicizzatori specifici dell'origine dati per BLOB, SQL e Azure Cosmos DB forniscono parametri configuration
aggiuntivi per comportamenti specifici dell'origine. Ad esempio, se l'origine è Archiviazione BLOB, è possibile impostare un parametro che filtra le estensioni di file, ad esempio:
"parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }
Se l'origine è Azure SQL, è possibile impostare un parametro di timeout della query.
I mapping dei campi vengono usati per eseguire il mapping esplicito dei campi da origine a destinazione in caso di discrepanze in base al nome o al tipo tra un campo nell'origine dati e un campo nell'indice di ricerca.
Per impostazione predefinita, un indicizzatore viene eseguito immediatamente quando viene creato nel servizio di ricerca. Se non si vuole eseguire l'indicizzatore, impostare su disabled
true durante la creazione dell'indicizzatore.
È anche possibile specificare una pianificazione o impostare una chiave di crittografia per la crittografia supplementare della definizione dell'indicizzatore.
Esempio di indicizzatore basato sulle competenze
L'indicizzazione basata sulle competenze usa l'arricchimento tramite intelligenza artificiale per elaborare il contenuto che non è ricercabile nel formato non elaborato. Tutte le proprietà e i parametri precedenti si applicano, ma le proprietà aggiuntive seguenti sono specifiche per l'arricchimento tramite intelligenza artificiale: skillSetName
, , cache
outputFieldMappings
.
{
"name": (required) String that uniquely identifies the indexer,
"dataSourceName": (required) String, provides raw content that will be enriched,
"targetIndexName": (required) String, name of an existing index,
"skillsetName" : (required for AI enrichment) String, name of an existing skillset,
"cache": {
"storageConnectionString" : (required if you enable the cache) Connection string to a blob container,
"enableReprocessing": true
},
"parameters": { },
"fieldMappings": (optional) Maps fields in the underlying data source to fields in an index,
"outputFieldMappings" : (required) Maps skill outputs to fields in an index,
}
L'arricchimento tramite intelligenza artificiale è una propria area di interesse ed è fuori dall'ambito per questo articolo. Per altre informazioni, iniziare con l'arricchimento tramite intelligenza artificiale, i set di competenze in Ricerca di intelligenza artificiale di Azure, Creare un set di competenze, mappare i campi di output arricchiti e Abilitare la memorizzazione nella cache per l'arricchimento tramite intelligenza artificiale.
Preparare dati esterni
Gli indicizzatori funzionano con i set di dati. Quando si esegue un indicizzatore, questo si connette all'origine dati e recupera i dati dal contenitore o dalla cartella, serializzandoli facoltativamente in JSON prima di passarli al motore di ricerca per l'indicizzazione. Questa sezione descrive i requisiti dei dati in ingresso per l'indicizzazione basata su testo.
Dati di origine | Attività |
---|---|
Documenti JSON | Assicurarsi che la struttura o la forma dei dati in ingresso corrispondano allo schema dell'indice di ricerca. La maggior parte degli indici di ricerca è relativamente piatta e la raccolta di campi è costituita da campi allo stesso livello. Tuttavia, le strutture gerarchiche o annidate sono possibili tramite campi complessi e raccolte. |
Relazionale | Specificare i dati come set di righe bidimensionale, in cui ogni riga diventa un documento di ricerca completo o parziale nell'indice. Per rendere flat i dati relazionali in un set di righe, è necessario creare una vista SQL o creare una query che restituisca record padre e figlio nella stessa riga. Ad esempio, il set di dati campione di hotel predefiniti è un database SQL con 50 record (uno per ogni hotel), collegato ai record delle camere in una tabella correlata. La query che rende flat i dati collettivi in un set di righe incorpora tutte le informazioni sulla stanza nei documenti JSON in ogni record dell'hotel. Le informazioni sulla stanza incorporata sono generate da una query che usa una clausola FOR JSON AUTO. Per altre informazioni su questa tecnica, vedere definire una query che restituisce JSON incorporato. Questo è solo un esempio; è possibile trovare altri approcci che producono lo stesso risultato. |
File | Un indicizzatore crea in genere un documento di ricerca per ogni file, in cui il documento di ricerca è costituito da campi per contenuto e metadati. A seconda del tipo di file, l'indicizzatore può a volte analizzare un file in più documenti di ricerca. Ad esempio, in un file CSV ogni riga può diventare un documento di ricerca autonomo. |
Tenere presente che è sufficiente eseguire il pull dei dati ricercabili e filtrabili:
- I dati ricercabili sono testo
- I dati filtrabili sono alfanumerici
Azure AI Search non è in grado di cercare dati binari in alcun formato, anche se può estrarre e dedurre descrizioni di testo dei file di immagine (vedere Arricchimento tramite intelligenza artificiale) per creare contenuto ricercabile. Analogamente, il testo di grandi dimensioni può essere suddiviso e analizzato dai modelli in linguaggio naturale per trovare la struttura o le informazioni pertinenti, generando nuovo contenuto che è possibile aggiungere a un documento di ricerca.
Dato che gli indicizzatori non risolvono problemi di dati, potrebbero essere necessarie altre forme di pulizia o manipolazione dei dati. Per altre informazioni, vedere la documentazione del prodotto database di Azure.
Preparare un'origine dati
Gli indicizzatori richiedono un'origine dati che specifica il tipo, il contenitore e la connessione.
Assicurarsi di usare un tipo di origine dati supportato.
Creare una definizione di origine dati. Le origini dati seguenti sono alcune delle origini usate più di frequente:
Se l'origine dati è un database, ad esempio Azure SQL o Cosmos DB, abilitare il rilevamento delle modifiche. Archiviazione di Azure include il rilevamento delle modifiche predefinito tramite la proprietà
LastModified
in ogni BLOB, file e tabella. I collegamenti per le varie origini dati illustrano quali metodi di rilevamento delle modifiche sono supportati dagli indicizzatori.
Preparare un indice
Per gli indicizzatori è necessario anche un indice di ricerca. Tenere presente che gli indicizzatori passano i dati al motore di ricerca per l'indicizzazione. Proprio come gli indicizzatori hanno proprietà che determinano il comportamento di esecuzione, uno schema di indice ha proprietà che influiscono profondamente sulla modalità di indicizzazione delle stringhe (che sono le uniche a essere analizzate e tokenizzate).
Iniziare con Creare un indice di ricerca.
Configurare l'insieme dei campi e gli attributi dei campi.
I campi sono gli unici recettori del contenuto esterno. A seconda della modalità di assegnazione dei campi nello schema, i valori per ogni campo vengono analizzati, tokenizzati o archiviati come stringhe verbatim per filtri, ricerca fuzzy e query typeahead.
Gli indicizzatori possono eseguire automaticamente il mapping dei campi di origine ai campi di indice di destinazione quando i nomi e i tipi sono equivalenti. Se non è possibile eseguire il mapping implicito di un campo, tenere presente che è possibile definire un mapping di campi esplicito che indica all'indicizzatore come instradare il contenuto.
Esaminare le assegnazioni dell'analizzatore in ogni campo. Gli analizzatori possono trasformare le stringhe. Di conseguenza, le stringhe indicizzate potrebbero essere diverse da quelle passate. È possibile valutare gli effetti degli analizzatori usando Analizza testo (REST). Per altre informazioni sugli analizzatori, vedere Analizzatori per l'elaborazione del testo.
Durante l'indicizzazione, un indicizzatore controlla solo i nomi e i tipi di campo. Non esiste alcun passaggio di convalida che garantisce che il contenuto in ingresso sia corretto per il campo di ricerca corrispondente nell'indice.
Creare un indicizzatore
Quando si è pronti per creare un indicizzatore in un servizio di ricerca remoto, è necessario un client di ricerca. Un client di ricerca può essere il portale di Azure, un client REST o un codice che crea un'istanza di un client indicizzatore. È consigliabile usare il portale di Azure o le API REST per lo sviluppo anticipato e il test di verifica.
Accedere al portale di Azure, quindi trovare il servizio di ricerca.
Nella pagina Panoramica del servizio di ricerca scegliere tra due opzioni:
Importazione guidata dati : la procedura guidata è univoca in quanto crea tutti gli elementi necessari. Altri approcci richiedono un'origine dati e un indice predefiniti.
Aggiungi indicizzatore: editor visivo per specificare una definizione dell'indicizzatore.
Eseguire l'indicizzatore
Per impostazione predefinita, un indicizzatore viene eseguito immediatamente quando viene creato nel servizio di ricerca. È possibile eseguire l'override di questo comportamento impostando disabled
su true nella definizione dell'indicizzatore. L'esecuzione dell'indicizzatore è il momento in cui si scopre se si verificano problemi con connessioni, mapping dei campi o costruzione del set di competenze.
Esistono diversi modi per eseguire un indicizzatore:
Esecuzione alla creazione o all'aggiornamento dell'indicizzatore (impostazione predefinita).
Eseguire su richiesta quando non sono presenti modifiche alla definizione o anteporre la reimpostazione per l'indicizzazione completa. Per altre informazioni, vedere Eseguire o reimpostare indicizzatori.
Pianificare l'elaborazione dell'indicizzatore per richiamare l'esecuzione a intervalli regolari.
L'esecuzione pianificata viene in genere implementata quando è necessaria l'indicizzazione incrementale in modo da poter raccogliere le modifiche più recenti. Di conseguenza, la pianificazione ha una dipendenza dal rilevamento delle modifiche.
Gli indicizzatori sono uno dei pochi sottosistemi che effettuano chiamate in uscita ad altre risorse di Azure. In termini di ruoli di Azure, gli indicizzatori non hanno identità separate; viene stabilita una connessione dal motore di ricerca a un'altra risorsa di Azure usando l'identità gestita assegnata dal sistema o dall'utente di un servizio di ricerca. Se l'indicizzatore si connette a una risorsa di Azure in una rete virtuale, è necessario creare un collegamento privato condiviso per tale connessione. Per altre informazioni sulle connessioni sicure, vedere Sicurezza in Ricerca di intelligenza artificiale di Azure.
Controllare i risultati
Monitorare lo stato dell'indicizzatore per verificare lo stato. Un'esecuzione riuscita può comunque includere avvisi e notifiche. Assicurarsi di controllare le notifiche di stato riuscite e non riuscite per informazioni dettagliate sul processo.
Per la verifica del contenuto, eseguire query sull'indice popolato che restituiscono interi documenti o campi selezionati.
Rilevamento delle modifiche e stato interno
Se l'origine dati supporta il rilevamento delle modifiche, un indicizzatore può rilevare le modifiche sottostanti nei dati ed elaborare solo i documenti nuovi o aggiornati in ogni esecuzione dell'indicizzatore, lasciando invariato il contenuto. Se la cronologia di esecuzione dell'indicizzatore indica che un'esecuzione ha avuto esito positivo con documenti 0/0 elaborati, significa che l'indicizzatore non ha trovato righe o BLOB nuovi o modificati nell'origine dati sottostante.
La logica di rilevamento delle modifiche è incorporata nelle piattaforme dati. Il modo in cui un indicizzatore supporta il rilevamento delle modifiche varia in base all'origine dati:
Archiviazione di Azure include il rilevamento delle modifiche predefinito, il che significa che un indicizzatore può riconoscere automaticamente i documenti nuovi e aggiornati. Archiviazione BLOB, Archiviazione tabelle di Azure e Azure Data Lake Storage Gen2 contrassegnano ogni aggiornamento di BLOB o riga con una data e un'ora. Un indicizzatore usa automaticamente queste informazioni per determinare quali documenti aggiornare nell'indice. Per altre informazioni sul rilevamento dell'eliminazione, vedere Rilevamento delle modifiche ed eliminazione tramite indicizzatori per Archiviazione di Azure.
Le tecnologie di database cloud offrono funzionalità facoltative di rilevamento delle modifiche nelle proprie piattaforme. Per queste origini dati, il rilevamento delle modifiche non è automatico. È necessario specificare nella definizione dell'origine dati quale criterio viene usato:
Gli indicizzatori tengono traccia dell'ultimo documento elaborato dall'origine dati tramite una filigrana elevata. L'indicatore non viene mai esposto nell'API, ma internamente l'indicizzatore tiene traccia della posizione in cui è stato arrestato. Quando l'indicizzazione riprende, tramite un'esecuzione pianificata o una chiamata su richiesta, l'indicizzatore fa riferimento alla filigrana elevata in modo che possa riprendere la posizione in cui è stata interrotta.
Se è necessario cancellare la filigrana elevata per reindicizzare completamente, è possibile usare Reimposta indicizzatore. Per una reindicizzazione più selettiva, usare Reimposta competenze o Reimposta documenti. Tramite le API di reimpostazione, è possibile cancellare lo stato interno e scaricare anche la cache se è stato abilitato l'arricchimento incrementale. Per altre informazioni di background e confronto di ogni opzione di reimpostazione, vedere Eseguire o reimpostare indicizzatori, competenze e documenti.