Configurare un suggerimento per il completamento automatico e le corrispondenze suggerite in una query

In Ricerca di intelligenza artificiale di Azure, typeahead (completamento automatico) o "search-as-you-type" è abilitato tramite un suggerimento. Un suggerimento è una configurazione in un indice che specifica i campi da usare per popolare il completamento automatico e i suggerimenti. Questi campi vengono sottoposti a tokenizzazione aggiuntiva, generando sequenze di prefissi per supportare le corrispondenze in termini parziali. Ad esempio, un suggerimento che include un campo City con un valore per "Seattle" avrà combinazioni di prefisso "sea", "seat", "seatt" e "seattl" per supportare typeahead.

Le corrispondenze in termini parziali possono essere una query di completamento automatico o una corrispondenza suggerita. Lo stesso strumento di suggerimento supporta entrambe le esperienze.

Typeahead può essere completamento automatico, che completa un input parziale per un'intera query di termini o suggerimenti che invitano a fare clic su una determinata corrispondenza. Il completamento automatico genera una query. I suggerimenti producono un documento corrispondente.

Lo screenshot seguente illustra entrambi. Il completamento automatico prevede un termine potenziale, terminando "tw" con "in". I suggerimenti sono mini risultati della ricerca, in cui un campo come il nome dell'hotel rappresenta un documento di ricerca hotel corrispondente dall'indice. Per suggerimenti, è possibile visualizzare qualsiasi campo che fornisce informazioni descrittive.

Visual comparison of autocomplete and suggested queries

È possibile usare queste funzionalità separatamente o insieme. Per implementare questi comportamenti in Ricerca di intelligenza artificiale di Azure, è presente un componente di indice e query.

  • Aggiungere un suggerimento a una definizione di indice di ricerca. Il resto di questo articolo è incentrato sulla creazione di un suggerimento.

  • Chiamare una query abilitata per il suggerimento, sotto forma di richiesta di suggerimento o completamento automatico, usando una delle API elencate in una sezione successiva.

La ricerca come tipo è abilitata per ogni campo per i campi stringa. È possibile implementare entrambi i comportamenti typeahead all'interno della stessa soluzione di ricerca se si vuole un'esperienza simile a quella indicata nello screenshot. Entrambe le richieste hanno come destinazione la raccolta di documenti di indici e risposte specifici dopo che un utente fornisce almeno una stringa di input a tre caratteri.

Come creare un suggerimento

Per creare un suggerimento, aggiungerne uno a una definizione di indice. Un suggerimento accetta un nome e una raccolta di campi su cui è abilitata l'esperienza typeahead. Il momento migliore per creare un suggerimento è quando si definisce anche il campo che lo usa.

  • Usare solo campi stringa.

  • Se il campo stringa fa parte di un tipo complesso (ad esempio, un campo Città all'interno di Address), includere l'elemento padre nel percorso del campo: "Address/City" (REST e C# e Python) o ["Address"]["City"] (JavaScript).

  • Usare l'analizzatore Lucene standard predefinito ("analyzer": null) o un analizzatore del linguaggio (ad esempio, "analyzer": "en.Microsoft") nel campo .

Se si tenta di creare un suggerimento usando campi preesistenti, l'API non lo consente. I prefissi vengono generati durante l'indicizzazione, quando i termini parziali in due o più combinazioni di caratteri vengono tokenizzati insieme a termini interi. Dato che i campi esistenti sono già tokenizzati, è necessario ricompilare l'indice se si desidera aggiungerli a un suggerimento. Per altre informazioni, vedere Come ricompilare un indice di Ricerca di intelligenza artificiale di Azure.

Selezionare i campi

Anche se un suggerimento ha diverse proprietà, si tratta principalmente di una raccolta di campi stringa per i quali si abilita un'esperienza di ricerca come tipo. Esiste un suggerimento per ogni indice, quindi l'elenco dei suggerimenti deve includere tutti i campi che contribuiscono al contenuto sia per i suggerimenti che per il completamento automatico.

Il completamento automatico trae vantaggio da un pool più ampio di campi da cui trarre perché il contenuto aggiuntivo ha un potenziale di completamento più lungo termine.

I suggerimenti, d'altra parte, producono risultati migliori quando la scelta del campo è selettiva. Tenere presente che il suggerimento è un proxy per un documento di ricerca in modo da selezionare i campi che rappresentano meglio un singolo risultato. Nomi, titoli o altri campi univoci che distinguono tra più corrispondenze funzionano meglio. Se i campi sono costituiti da valori ripetitivi, i suggerimenti sono costituiti da risultati identici e un utente non saprà quale scegliere.

Per soddisfare entrambe le esperienze di ricerca come tipo, aggiungere tutti i campi necessari per il completamento automatico, ma quindi usare select, topfilter, e searchFields per controllare i risultati per i suggerimenti.

Scegliere gli analizzatori

La scelta di un analizzatore determina il modo in cui i campi vengono tokenizzati e preceduti da prefisso. Ad esempio, per una stringa sillabata come "sensibile al contesto", l'uso di un analizzatore del linguaggio genera queste combinazioni di token: "context", "sensitive", "context-sensitive". Se fosse stato usato l'analizzatore Lucene standard, la stringa sillabata non esisterebbe.

Quando si valutano gli analizzatori, è consigliabile usare l'API Analizza testo per ottenere informazioni dettagliate sull'elaborazione dei termini. Dopo aver compilato un indice, è possibile provare vari analizzatori in una stringa per visualizzare l'output del token.

I campi che usano analizzatori personalizzati o analizzatori predefiniti (ad eccezione dello standard Lucene) non sono esplicitamente consentiti per evitare risultati scarsi.

Nota

Se è necessario aggirare il vincolo dell'analizzatore, ad esempio se è necessaria una parola chiave o un analizzatore di ngram per determinati scenari di query, è necessario usare due campi separati per lo stesso contenuto. Ciò consentirà a uno dei campi di avere un suggerimento, mentre l'altro può essere configurato con una configurazione dell'analizzatore personalizzato.

Creare usando il portale

Quando si usa Aggiungi indice o la procedura guidata Importa dati per creare un indice, è possibile abilitare un suggerimento:

  1. Nella definizione dell'indice immettere un nome per il suggerimento.

  2. In ogni definizione di campo per i nuovi campi selezionare una casella di controllo nella colonna Suggerimento. Una casella di controllo è disponibile solo nei campi stringa.

Come indicato in precedenza, la scelta dell'analizzatore influisce sulla tokenizzazione e sul prefisso. Prendere in considerazione l'intera definizione di campo quando si abilitano i suggerimenti.

Creare usando REST

Nell'API REST aggiungere suggerimenti tramite Crea indice o Aggiorna indice.

{
  "name": "hotels-sample-index",
  "fields": [
    . . .
        {
            "name": "HotelName",
            "type": "Edm.String",
            "facetable": false,
            "filterable": false,
            "key": false,
            "retrievable": true,
            "searchable": true,
            "sortable": false,
            "analyzer": "en.microsoft",
            "indexAnalyzer": null,
            "searchAnalyzer": null,
            "synonymMaps": [],
            "fields": []
        },
  ],
  "suggesters": [
    {
      "name": "sg",
      "searchMode": "analyzingInfixMatching",
      "sourceFields": ["HotelName"]
    }
  ],
  "scoringProfiles": [
    . . .
  ]
}

Creare con .NET

In C# definire un oggetto SearchSuggester. Suggesters è una raccolta in un oggetto SearchIndex, ma può accettare un solo elemento. Aggiungere un suggerimento alla definizione dell'indice.

private static void CreateIndex(string indexName, SearchIndexClient indexClient)
{
    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);

    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);

    indexClient.CreateOrUpdateIndex(definition);
}

Informazioni di riferimento sulle proprietà

Proprietà Descrizione
name Specificato nella definizione del suggerimento, ma chiamato anche in una richiesta di completamento automatico o suggerimenti.
sourceFields Specificato nella definizione del suggerimento. Si tratta di un elenco di uno o più campi nell'indice che rappresentano l'origine del contenuto per i suggerimenti. I campi devono essere di tipo Edm.String. Se nel campo è specificato un analizzatore, deve essere un analizzatore lessicale denominato da questo elenco (non un analizzatore personalizzato).

Come procedura consigliata, specificare solo i campi che si prestano a una risposta prevista e appropriata, sia che si tratti di una stringa completata in una barra di ricerca o in un elenco a discesa.

Un nome di hotel è un buon candidato perché ha precisione. I campi dettagliati, come descrizioni e commenti, sono troppo densi. Analogamente, i campi ripetitivi, ad esempio categorie e tag, sono meno efficaci. Negli esempi si include comunque "category" per dimostrare che è possibile includere più campi.
searchMode Parametro solo REST, ma anche visibile nel portale. Questo parametro non è disponibile in .NET SDK. Indica la strategia usata per cercare frasi candidate. L'unica modalità attualmente supportata è analyzingInfixMatching, che attualmente corrisponde all'inizio di un termine.

Usare un suggerimento

Un suggerimento viene usato in una query. Dopo aver creato un suggerimento, chiamare una delle API seguenti per un'esperienza di ricerca come tipo:

In un'applicazione di ricerca, il codice client deve usare una libreria come il completamento automatico dell'interfaccia utente di jQuery per raccogliere la query parziale e fornire la corrispondenza. Per altre informazioni su questa attività, vedere Aggiungere il completamento automatico o i risultati suggeriti al codice client.

L'utilizzo dell'API è illustrato nella chiamata seguente all'API REST di completamento automatico. In questo esempio sono presenti due aspetti. In primo luogo, come per tutte le query, l'operazione si trova sulla raccolta di documenti di un indice e la query include un search parametro, che in questo caso fornisce la query parziale. In secondo luogo, è necessario aggiungere suggesterName alla richiesta. Se un suggerimento non è definito nell'indice, le chiamate al completamento automatico o ai suggerimenti hanno esito negativo.

POST /indexes/myxboxgames/docs/autocomplete?search&api-version=2023-11-01
{
  "search": "minecraf",
  "suggesterName": "sg"
}

Codice di esempio

Passaggi successivi

Altre informazioni sulla formulazione di requests\.