Creare un indice in Azure AI Search

In questo articolo viene illustrata la procedura per definire uno schema per un indice di ricerca ed eseguirne il push in un servizio di ricerca. La creazione di un indice stabilisce le strutture dei dati fisici nel servizio di ricerca. Una volta creato l’indice, caricare l'indice come attività separata.

Prerequisiti

  • Autorizzazioni di scrittura come collaboratore del servizio di ricerca o amministratore chiave API per l'autenticazione basata su chiave.

  • Conoscere i dati che si vogliono indicizzare. Un indice di ricerca si basa su contenuto esterno che si desidera rendere ricercabile. Il contenuto ricercabile in un indice viene archiviato come campi. È necessario avere un'idea chiara dei campi di origine che si desidera rendere ricercabili, recuperabili, filtrabili, visibili e ordinabili (vedere l'elenco di controllo dello schema per ottenere indicazioni).

  • È inoltre necessario disporre di un campo univoco nei dati di origine che può essere usato come chiave del documento (o ID) nell'indice.

  • Posizione stabile dell'indice. Lo spostamento di un indice esistente in un servizio di ricerca diverso non è supportato per impostazione predefinita. Rivedere i requisiti dell'applicazione e assicurarsi che il servizio di ricerca esistente (capacità e posizione) sia sufficiente per le proprie esigenze.

  • Infine, tutti i livelli di servizio hanno limiti di indice sul numero di oggetti che è possibile creare. Ad esempio, se si sta sperimentando il livello Gratuito, è possibile avere solo tre indici in un determinato momento. All'interno dell'indice stesso, esistono limiti sui vettori e limiti di indice sul numero di campi semplici e complessi.

Chiavi documento

Un indice di ricerca ha due requisiti: deve avere un nome e una chiave del documento.

Una chiave del documento è l'identificatore univoco di un documento di ricerca, e un documento di ricerca è una raccolta di campi che descrive esaustivamente un determinato elemento. Ad esempio, se si indicizza un set di dati relativi a un film, un documento di ricerca contiene il titolo, il genere e la durata di un singolo film.

In Azure AI Search, una chiave del documento deve essere una stringa e deve provenire da valori univoci nell'origine dati che fornisce il contenuto da indicizzare. Un servizio di ricerca non genera valori chiave, ma in alcuni scenari, ad esempio l'indicizzatore di tabelle di Azure, sintetizza i valori esistenti per creare una chiave univoca per i documenti indicizzati.

Durante l'indicizzazione incrementale, in cui viene indicizzato il contenuto nuovo e quello aggiornato, vengono aggiunti documenti in ingresso con nuove chiavi, mentre i documenti in ingresso con chiavi esistenti vengono uniti o sovrascritti, a seconda che i campi di indice siano null o popolati.

Elenco di controllo dello schema

Usare questo elenco di controllo per facilitare le decisioni di progettazione per l'indice di ricerca.

  1. Esaminare convenzioni di denominazione in modo che i nomi degli indici e dei campi siano conformi alle regole di denominazione.

  2. Vedere i tipi di dati supportati. Il tipo di dati influisce sulla modalità di utilizzo del campo. Ad esempio, i contenuti numerici sono filtrabile ma non ricercabili come full-text. Il tipo di dati più comune per il testo ricercabile è Edm.String, che viene tokenizzato e sottoposto a query usando il motore di ricerca full-text. Il tipo di dati più comune per un campo vettoriale è Edm.Single ma è possibile usare anche altri tipi.

  3. Identificare una chiave del documento. La chiave di un documento è un requisito di indice. Si tratta di un singolo campo stringa e viene popolato da un campo dati di origine che contiene valori univoci. Ad esempio, se si esegue l'indicizzazione da Archiviazione BLOB, il percorso di archiviazione dei metadati viene spesso usato come chiave del documento perché identifica in modo univoco ogni BLOB del contenitore.

  4. Identificare i campi nell'origine dati che contribuiscono al contenuto ricercabile nell'indice.

    Il contenuto nonvettoriale ricercabile include stringhe brevi o lunghe su cui viene eseguita una query tramite il motore di ricerca full-text. Se il contenuto è dettagliato (frasi brevi o blocchi più grandi), provare a usare analizzatori diversi per vedere come viene tokenizzato il testo.

    Il contenuto vettoriale ricercabile possono essere immagini o testo (in qualsiasi lingua) che esiste come rappresentazione matematica. È possibile usare tipi di dati ristretti o la compressione vettoriale per ridurre i campi vettoriali.

    Le assegnazioni di attributi di campo determinano sia i comportamenti di ricerca che la rappresentazione fisica dell'indice nel servizio di ricerca. Determinare il modo in cui devono essere specificati i campi è un processo iterativo per molti clienti. Per velocizzare le iterazioni, iniziare con i dati di esempio in modo da poterli eliminare e ricompilare facilmente.

  5. Identificare quali campi di origine possono essere usati come filtri. Il contenuto numerico e i campi di testo breve, in particolare quelli con valori ripetuti, sono scelte valide. Quando si lavora con i filtri, tenere presente quanto illustrato di seguito:

    • I filtri possono essere usati nelle query vettoriale e non vettoriale, ma il filtro stesso viene applicato ai campi alfanumerici (non vettoriali) dell'indice.

    • I campi filtrabili possono essere usati facoltativamente nel riquadro di esplorazione in base a facet.

    • I campi filtrabili vengono restituiti in ordine arbitrario, pertanto è consigliabile renderli ordinabili.

  6. Per i campi vettoriali, specificare una configurazione di ricerca vettoriale e gli algoritmi usati per creare i percorsi di spostamento e riempire lo spazio di incorporamento. Per altre informazioni, vedere Aggiungere campi vettoriali.

    I campi vettoriali hanno proprietà aggiuntive che i campi non vettoriali non hanno, ad esempio gli algoritmi da usare e la compressione vettoriale.

    I campi vettoriali omettono attributi che non sono utili per i dati vettoriali, ad esempio l'ordinamento, il filtro e il faceting.

  7. Per i campi non vettoriali, determinare se usare l'analizzatore predefinito ("analyzer": null) o un analizzatore diverso. Gli analizzatori vengono usati per tokenizzare i campi di testo durante l'indicizzazione e l'esecuzione di query.

    Per le stringhe multilingue, prendere in considerazione un analizzatore della lingua.

    Per le stringhe sillabate o per caratteri speciali, prendere in considerazione analizzatori specializzati. Ne è un esempio la parola chiave che gestisce l'intero contenuto di un campo come un token singolo. Questo comportamento è utile per i dati come i codici postali, gli ID e alcuni nomi di prodotto. Per altre informazioni, vedere Ricerca e modelli di termini parziali con caratteri speciali.

Nota

La ricerca full-text viene eseguita su termini che vengono tokenizzati durante l'indicizzazione. Se le query non restituiscono i risultati previsti, testare la tokenizzazione per verificare che la stringa in cui si sta cercando esista effettivamente. È possibile provare diversi analizzatori sulle stringhe per vedere come vengono prodotti i token dei vari analizzatori.

Creare un indice

Quando si è pronti per creare l'indice, usare un client di ricerca in grado di inviare la richiesta. È possibile usare il portale di Azure o le API REST per lo sviluppo iniziale e il test di verifica, altrimenti è comune usare gli SDK di Azure.

Durante lo sviluppo, pianificare le ricompilazioni frequenti. Poiché nel servizio vengono create strutture fisiche, è necessario eliminare e creare nuovamente gli indici nel caso di molte modifiche. È possibile prendere in considerazione l'uso di un subset di dati per velocizzare le ricompilazioni.

La progettazione degli indici tramite il portale applica i requisiti e le regole dello schema per tipi di dati specifici, ad esempio non consentire le funzionalità di ricerca full-text sui campi numerici.

  1. Accedere al portale di Azure.

  2. Verificare lo spazio. I servizi di ricerca sono soggetti al numero massimo di indici, che variano in base al livello di servizio. Assicurarsi di disporre di spazio per un secondo indice.

  3. Nella pagina di panoramica del servizio di ricerca, scegliere una delle opzioni per la creazione di un indice di ricerca:

    • Aggiungere un indice, un editor incorporato per specificare uno schema di indice
    • Importazione guidata

    La procedura guidata è un flusso di lavoro dettagliato che crea un indicizzatore, un'origine dati e un indice finito. Carica anche i dati. Se è più di quanto si vuole, usare invece Aggiungi indice.

Lo screenshot seguente evidenzia la posizione in cui vengono visualizzate le opzioni Aggiungi indice e Importa dati sulla barra dei comandi. Dopo aver creato un indice, è possibile trovarlo di nuovo nella scheda Indici.

Comando Aggiungi indice

Suggerimento

Dopo aver creato un indice nel portale, è possibile copiare la rappresentazione JSON e aggiungerla al codice dell'applicazione.

Impostare corsOptions per le query su più origini

Gli schemi di indice includono una sezione per l'impostazione di corsOptions. Per impostazione predefinita, JavaScript lato client non può chiamare alcuna API perché i browser impediscono tutte le richieste su più origini. Per consentire query con origini diverse nell'indice, abilitare CORS (Cross-Origin Resource Sharing) impostando l'attributo corsOptions. Per motivi di sicurezza, solo le API di query supportano CORS.

"corsOptions": {
  "allowedOrigins": [
    "*"
  ],
  "maxAgeInSeconds": 300

Per CORS è possibile impostare le proprietà seguenti:

  • allowedOrigins (obbligatorio): si tratta di un elenco di origini possono accedere all'indice. Il codice JavaScript servito da queste origini è autorizzato a eseguire query sull'indice (presupponendo che il chiamante fornisca una chiave valida o disponga delle autorizzazioni). Ogni origine è in genere nel formato protocol://<fully-qualified-domain-name>:<port> anche se <port> spesso viene omessa. Per altre informazioni, vedere Utilizzare la condivisione di risorse tra origini (Wikipedia).

    Per consentire l'accesso a tutte le origini, includere * come unico elemento nella matriceallowedOrigins. Non si consiglia questa pratica per i servizi di ricerca della produzione ma spesso è utile per lo sviluppo e il debug.

  • maxAgeInSeconds (facoltativo): i browser usano questo valore per determinare la durata (in secondi) di memorizzazione nella cache delle risposte preliminari CORS. Questo valore deve essere un intero non negativo. Un periodo di cache più lungo offre prestazioni migliori, ma estende la quantità di tempo necessaria per rendere effettivo un criterio CORS. Se questo valore non è impostato, viene usata una durata predefinita di cinque minuti.

Aggiornamenti consentiti per gli indici esistenti

Crea indice crea le strutture di dati fisiche (file e indici invertiti) nel servizio di ricerca. Dopo aver creato l'indice, la possibilità di apportare modifiche tramite Crea o Aggiorna indice dipende dal fatto che le modifiche invalidino tali strutture fisiche. La maggior parte degli attributi di campo non può essere modificata dopo la creazione del campo nell'indice.

In alternativa, è possibile creare un alias di indice che funge da riferimento stabile nel codice dell'applicazione. Anziché aggiornare il codice, è possibile aggiornare un alias di indice in modo che punti alle versioni più recenti dell'indice.

Per ridurre al minimo l’abbandono del processo di progettazione, nella tabella seguente vengono descritti gli elementi fissi e quelli flessibili dello schema. La modifica di un elemento fisso richiede una ricompilazione dell'indice, mentre gli elementi flessibili possono essere modificati in qualsiasi momento senza influire sull'implementazione fisica.

Elemento È possibile aggiornare?
Nome No
Chiave No
Nomi e tipi di campo No
Attributi di campo (ricercabile, filtrabile, con facet, ordinabile) No
Attributo di campo (recuperabile)
Archiviato (si applica ai vettori) No
Analizzatore È possibile aggiungere e modificare analizzatori personalizzati nell'indice. Per quanto riguarda le assegnazioni di analizzatori nei campi stringa, è possibile modificare solo searchAnalyzer. Tutte le altre assegnazioni e modifiche richiedono una ricompilazione.
Profili di punteggio
Componenti per il suggerimento No
condivisione di risorse tra le origini (CORS)
Crittografia

Passaggi successivi

Usare i collegamenti seguenti per acquisire familiarità con il caricamento di un indice con i dati o l'estensione di un indice con una mappa dei sinonimi.