Creare un indice per più lingue in Azure AI Search

Se si dispone di stringhe in più lingue, è possibile associare analizzatori del linguaggio che analizzano le stringhe tramite le regole linguistiche di un idioma specifico durante l'indicizzazione e l'esecuzione di query. Con un analizzatore del linguaggio è possibile gestire meglio le varianti dei caratteri, la punteggiatura e le forme delle radici delle parole.

Azure AI Search supporta gli analizzatori Microsoft e Lucene. Per impostazione predefinita, il motore di ricerca usa Lucene Standard, che è indipendente dalla lingua. Se il test indica che l'analizzatore predefinito non è sufficiente, sostituirlo con un analizzatore della lingua.

In Azure AI Search i due modelli per il supporto di più lingue includono:

  • La creazione di indici specifici della lingua in cui tutto il contenuto alfanumerico è nella stessa lingua e tutti i campi stringa ricercabili vengono impostati per l’uso dello stesso analizzatore della lingua.

  • La creazione di un indice combinato con versioni specifiche della lingua per ogni campo, ad esempio description_en, description_fr, description_ko, e di conseguenza limitare la ricerca full-text solo a tali campi in fase di query. Questo approccio è utile per gli scenari in cui le varianti della lingua sono necessarie solo in alcuni campi, ad esempio una descrizione.

Questo articolo è incentrato sui passaggi e sulle procedure consigliate per la configurazione e l'esecuzione di query su campi specifici della lingua in un indice misto:

  • Definire un campo stringa per ogni variante della lingua.
  • Impostare un analizzatore della lingua in ogni campo.
  • Nella richiesta di query impostare il parametro searchFields su campi specifici, quindi usare select per restituire solo i campi con contenuto compatibile.

Nota

Se si usano modelli linguistici di grandi dimensioni in un modello RAG (Retrieval Augmented Generated), è possibile progettare la richiesta in modo che restituisca stringhe tradotte. Questo scenario non rientra nell'ambito di questo articolo.

Prerequisiti

L'analisi della lingua si applica ai campi di tipo Edm.String che sono searchable e che contengono testo localizzato. Se è necessaria anche la traduzione testuale, esaminare la sezione successiva per verificare se l'arricchimento tramite intelligenza artificiale soddisfa le proprie esigenze.

I campi non stringa e i campi stringa non ricercabili non vengono sottoposti ad analisi lessicale e non vengono tokenizzati. Vengono invece archiviati e restituiti testualmente.

Aggiungere traduzione testo

Questo articolo presuppone che le stringhe tradotte esistano già. In caso contrario, è possibile collegare Servizi di Azure AI a una pipeline di arricchimento, richiamando la traduzione testuale durante l'indicizzazione. La traduzione testuale dipende dalla funzionalità dell'indicizzatore e da Servizi di Azure AI, ma tutta la configurazione viene eseguita all'interno di Servizi di Azure AI.

Per aggiungere la traduzione testuale, seguire questa procedura:

  1. Verificare che il contenuto sia in un'origine dati supportata.

  2. Creare un'origine dati che punti al contenuto.

  3. Creare un set di competenze che includa la competenza Traduzione testo.

    La competenza Traduzione testo accetta una singola stringa come input. Se sono presenti più campi, è possibile creare un set di competenze che chiama Traduzione testo più volte, una per ogni campo. In alternativa, è possibile usare la competenza Unione testo per consolidare il contenuto di più campi in un’unica stringa lunga.

  4. Creare un indice che includa campi per le stringhe tradotte. Gran parte di questo articolo illustra la progettazione degli indici e le definizioni dei campi per l'indicizzazione e l'esecuzione di query su contenuto multilingue.

  5. Collegare una risorsa di Servizi di Azure AI su più aree al set di competenze.

  6. Creare ed eseguire l'indicizzatore, quindi applicare le indicazioni contenute in questo articolo per eseguire una query solo sui campi di interesse.

Suggerimento

La traduzione testuale è incorporata nell’Importazione guidata dati. Se si dispone di un'origine dati supportata con testo che si vuole tradurre, è possibile eseguire la procedura guidata per provare la funzionalità di rilevamento lingua e traduzione prima di scrivere il codice.

Definire i campi per il contenuto in lingue diverse

In Azure AI Search la destinazione delle query è un solo indice. Gli sviluppatori che vogliono fornire stringhe specifiche della lingua in un'unica esperienza di ricerca in genere definiscono campi dedicati per l'archiviazione dei valori: un campo per le stringhe in inglese, uno per il francese e così via.

La proprietà analyzer nella definizione di un campo viene utilizzata per impostare l'analizzatore della lingua. Viene usata sia per l'indicizzazione che per l'esecuzione di query.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Creare e caricare un indice

Un passaggio intermedio consiste nel compilare e popolare l'indice prima di formulare una query. Questo passaggio viene citato qui per motivi di completezza. Un modo per determinare la disponibilità dell’indice consiste nel controllare l'elenco degli indici nel portale.

Limitare la query e ridurre i risultati

I parametri nella query vengono usati per limitare la ricerca ai campi specifici e quindi ridurre i risultati di tutti i campi non utili per lo scenario.

Parametri Scopo
searchFields Limita la ricerca full-text all'elenco dei campi denominati.
select Riduce la risposta in modo da includere solo i campi specificati. Per impostazione predefinita, vengono restituiti tutti i campi recuperabili. Il parametro select permette di scegliere quali restituire.

Considerando un caso in cui l'obiettivo è limitare la ricerca ai campi che contengono stringhe in francese, è necessario usare searchFields perché la destinazione della query siano i campi che contengono stringhe in tale lingua.

Non è necessario specificare l'analizzatore in una richiesta di query. Un analizzatore della lingua nella definizione del campo determina l'analisi del testo durante l'esecuzione della query. Per le query che specificano più campi, ognuno dei quali richiama analizzatori della lingua diversi, i termini o le frasi vengono elaborati simultaneamente dagli analizzatori assegnati per ogni campo.

Per impostazione predefinita, una ricerca restituisce tutti i campi contrassegnati come recuperabili. Di conseguenza, si potrebbe voler escludere i campi che non sono conformi all'esperienza di ricerca specifica della lingua che si vuole fornire. In particolare, se si limita la ricerca a un campo con stringhe in francese, probabilmente si vorrà escludere i campi contenenti stringhe in inglese dai risultati. L'uso del parametro di query select consente di controllare i campi restituiti all'applicazione chiamante.

Esempio in REST

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-07-01
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

Esempio in C#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Incrementare i campi specifici della lingua

È possibile che la lingua dell'agente che esegue una query non sia nota, in tal caso la query può essere inviata a tutti i campi contemporaneamente. È possibile definire delle preferenze IA per i risultati in una determinata lingua usando i profili di punteggio. Nell'esempio seguente, alle corrispondenze trovate nella descrizione in francese viene assegnato un punteggio più elevato rispetto alle corrispondenze in altre lingue:

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

Si includerà quindi il profilo di punteggio nella richiesta di ricerca:

POST /indexes/hotels/docs/search?api-version=2024-07-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

Passaggi successivi