Creare un indice in Ricerca di intelligenza artificiale di Azure

In Ricerca di intelligenza artificiale di Azure le richieste di query hanno come destinazione il testo ricercabile in un indice di ricerca.

In questo articolo vengono illustrati i passaggi per definire e pubblicare un indice di ricerca. La creazione di un indice stabilisce le strutture di dati fisici nel servizio di ricerca. Una volta creata la definizione dell'indice, il caricamento dell'indice segue come attività separata.

Prerequisiti

  • Autorizzazioni di scrittura. L'autorizzazione può essere concessa tramite una chiave API amministratore nella richiesta. In alternativa, se si usa il controllo degli accessi in base al ruolo, inviare una richiesta come membro del ruolo Collaboratore ricerca.

  • Conoscenza dei dati da indicizzare. La creazione di un indice è un esercizio di definizione dello schema, pertanto è 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 indicazioni).

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

  • Posizione dell'indice stabile. 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, la capacità e la posizione, siano sufficienti 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 sono previsti limiti per il numero di campi complessi e raccolte.

Chiavi documento

Un indice di ricerca ha un campo obbligatorio: una chiave del documento. Una chiave del documento è l'identificatore univoco di un documento di ricerca. In Ricerca di intelligenza artificiale di Azure 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 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 le convenzioni di denominazione in modo che i nomi degli indici e dei campi siano conformi alle regole di denominazione.

  2. Esaminare i tipi di dati supportati. Il tipo di dati influisce sulla modalità di utilizzo del campo. Ad esempio, il contenuto numerico è filtrabile ma non ricercabile full-text. Il tipo di dati più comune è Edm.String per il testo ricercabile, che viene tokenizzato e sottoposto a query usando il motore di ricerca full-text.

  3. Identificare una chiave del documento. Una chiave del 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 BLOB Archiviazione, il percorso di archiviazione dei metadati viene spesso usato come chiave del documento perché identifica in modo univoco ogni BLOB nel contenitore.

  4. Identificare i campi nell'origine dati che contribuiscono al contenuto ricercabile nell'indice. Il contenuto ricercabile include stringhe brevi o lunghe su cui viene eseguita una query usando il motore di ricerca full-text. Se il contenuto è dettagliato (frasi piccole o blocchi più grandi), provare a usare analizzatori diversi per vedere come viene tokenizzato il testo.

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

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

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

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

  6. 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 del linguaggio.

    Per le stringhe sillabate o caratteri speciali, prendere in considerazione analizzatori specializzati. Un esempio è la parola chiave che considera l'intero contenuto di un campo come un singolo token. Questo comportamento è utile per dati come codici postali, 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, verificare che la tokenizzazione sia effettivamente presente. È possibile provare diversi analizzatori sulle stringhe per vedere come vengono prodotti i token per 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 le API REST o portale di Azure per lo sviluppo anticipato e il test di verifica.

Durante lo sviluppo, pianificare le ricompilazione frequenti. Poiché nel servizio vengono create strutture fisiche, è necessario eliminare e creare nuovamente gli indici per 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 nei campi numerici.

  1. Accedere al portale di Azure.

  2. Nella pagina Panoramica del servizio di ricerca scegliere una delle opzioni per la creazione di un indice di ricerca:

    La procedura guidata è un flusso di lavoro end-to-end che crea un indicizzatore, un'origine dati e un indice finito. Carica anche i dati. Se si tratta di più di quello desiderato, usare invece Aggiungi indice .

Lo screenshot seguente evidenzia la posizione in cui vengono visualizzati l'opzione 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 tra origini

Gli schemi di indice includono una sezione per l'impostazione corsOptionsdi . Per impostazione predefinita, JavaScript sul lato client non può chiamare api perché i browser impediscono tutte le richieste tra le origini. Per consentire le query tra le origini tramite l'indice, abilitare CORS (Condivisione risorse tra le origini) 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): elenco di origini consentite per l'accesso 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 Condivisione di risorse tra le origini (Wikipedia).

    Per consentire l'accesso a tutte le origini, includere * come unico elemento nella matriceallowedOrigins. Questa non è una procedura consigliata per i servizi di ricerca di produzione, ma è spesso utile per lo sviluppo e il debug.

  • maxAgeInSeconds (facoltativo): i browser usano questo valore per determinare la durata (in secondi) per memorizzare nella cache le 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 usando l'indice di aggiornamento 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 la varianza nel processo di progettazione, nella tabella seguente vengono descritti gli elementi fissi e flessibili nello 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, facetable, ordinabile) No
Attributo field (recuperabile)
Analizzatore È possibile aggiungere e modificare analizzatori personalizzati nell'indice. Per quanto riguarda le assegnazioni di analizzatori nei campi stringa, è possibile modificare searchAnalyzersolo . 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.