Condividi tramite


Creare una query full-text in Ricerca di intelligenza artificiale di Azure

Se si sta creando una query per laquery full-text, questo articolo illustra la procedura per configurare la richiesta. Introduce anche una struttura di query e spiega in che modo gli attributi dei campi e gli analizzatori linguistici possono influire sui risultati delle query.

Prerequisiti

Esempio di richiesta di query full-text

In Azure AI Search, una query è una richiesta di sola lettura della raccolta di documenti di un singolo indice di ricerca, con parametri che informano l'esecuzione della query e modellano la risposta restituita.

Una query full text viene specificata in un parametro search ed è costituita da termini, frasi racchiuse tra virgolette e operatori. Altri parametri aggiungono altre definizioni alla richiesta.

La chiamata API REST POST di ricerca seguente illustra una richiesta di query usando i parametri indicati.

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-07-01
{
    "search": "NY +view",
    "queryType": "simple",
    "searchMode": "all",
    "searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "select": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "top": 10,
    "count": true
}

Punti chiave

  • search fornisce i criteri di corrispondenza, in genere termini interi o frasi, con o senza operatori. Qualsiasi campo attribuito come ricercabile nello schema dell'indice è un candidato per questo parametro.

  • queryType imposta il parser: semplice, pieno. Il parser di query semplice predefinito è ottimale per la ricerca full-text. Il parser di query Lucene completo è destinato a costrutti di query avanzati come espressioni regolari, ricerca di prossimità, ricerca fuzzy e con caratteri jolly. Questo parametro può anche essere impostato sulla semantica per la classificazione semantica per la modellazione semantica avanzata nella risposta della query.

  • searchMode specifica se le corrispondenze sono basate su tutti i criteri (predilige la precisione) o su qualsiasi criterio (richiamare) nell'espressione. L'impostazione predefinita è any. Se si prevede un uso elevato degli operatori booleani, che è più probabile negli indici che contengono blocchi di testo di grandi dimensioni (un campo di contenuto o descrizioni lunghe), assicurarsi di testare le query con il searchMode=Any|All parametro per valutare l'impatto di tale impostazione nella ricerca booleana.

  • searchFields limita l'esecuzione della query a specifici campi ricercabili. Durante lo sviluppo, è utile usare lo stesso elenco di campi per la selezione e la ricerca. In caso contrario, una corrispondenza potrebbe basarsi su valori di campo non visibili nei risultati, creando incertezza sul motivo per cui è stato restituito il documento.

Parametri usati per modellare la risposta:

  • select specifica quali campi restituire nella risposta. Solo i campi contrassegnati come recuperabili nell'indice possono essere usati in un'istruzione select.

  • top restituisce il numero specificato di documenti con la migliore corrispondenza. In questo esempio vengono restituiti solo 10 risultati. È possibile usare in alto e ignora (non mostrato) per sfogliare i risultati.

  • count indica il numero complessivo di documenti corrispondenti nell'intero indice, che può essere superiore a quello restituito.

  • orderby si può usare per ordinare i risultati in base a un valore, come una classificazione o una posizione. In caso contrario, l'impostazione predefinita prevede l'uso del punteggio di pertinenza per classificare i risultati. Un campo deve essere attribuito come ordinabile per essere un candidato per questo parametro.

Scegliere un client

Per i primi test di sviluppo e modello di verifica, iniziare con il portale di Azure o un client REST. Entrambi gli approcci sono interattivi, utili per test mirati e consentono di valutare gli effetti di diverse proprietà senza dover scrivere codice.

Per chiamare la ricerca dall'interno di un'app, usare le Azure.Document.Search librerie client negli SDK di Azure per .NET, Java, JavaScript e Python.

Nel portale, quando si apre un indice, è possibile usare Esplora ricerche insieme alla definizione JSON dell'indice in schede affiancate per un facile accesso agli attributi dei campi. Controllare la tabella Campi per vedere quali sono ricercabili, ordinabili, filtrabili e con facet durante il test delle query.

  1. Accedere al portale di Azure e trovare il servizio di ricerca.

  2. Nel servizio selezionare Indici e scegliere un indice.

  3. Un indice si apre nella scheda Esplora ricerche, in modo da poter eseguire immediatamente una query. Passare alla visualizzazione JSON per specificare la sintassi della query.

    Ecco un'espressione di ricerca full text che funziona per l'indice di esempio Hotels:

       {
           "search": "pool spa +airport",
           "queryType": "simple",
           "searchMode": "any",
           "searchFields": "Description, Tags",
           "select": "HotelName, Description, Tags",
           "top": 10,
           "count": true
       }
    

    Lo screenshot seguente illustra la query e la risposta:

    Screenshot di Esplora ricerche con una query full-text.

Scegliere un tipo di query: semplice | completa

Se la query è una ricerca full-text, viene usato un parser di query per elaborare qualsiasi testo passato come termini di ricerca e frasi. Azure AI Search offre due parser di query.

  • Il parser semplice riconosce la sintassi di query semplice. Questo parser è stato selezionato come predefinito per la sua velocità ed efficacia nelle query di testo in formato libera. La sintassi supporta operatori di ricerca comuni (AND, OR, NOT) per le ricerche di termini e frasi e la ricerca prefisso (*) (come in sea* per Seattle e Sea). Un consiglio generale è quello di provare prima il parser semplice, per poi passare al parser completo se i requisiti dell'applicazione richiedono query più potenti.

  • La sintassi di query Lucene completa, abilitata quando si aggiunge queryType=full alla richiesta, si basa sul Parser Apache Lucene.

La sintassi completa e la sintassi semplice si sovrappongono nella misura in cui entrambi supportano le stesse operazioni di prefisso e booleano, ma la sintassi completa fornisce più operatori. Sono disponibili più operatori per le espressioni booleane e altri operatori per query avanzate, ad esempio la ricerca fuzzy, la ricerca con caratteri jolly, la ricerca di prossimità e le espressioni regolari.

Scegliere i metodi di query

La ricerca è fondamentalmente un esercizio guidato dall'utente, in cui i termini o le frasi vengono raccolti da una casella di ricerca o da eventi di clic su una pagina. La tabella seguente riepiloga i meccanismi con cui è possibile raccogliere gli input dell'utente, insieme all'esperienza di ricerca prevista.

Input Esperienza
Metodo di ricerca Un utente digita i termini o le frasi in una casella di ricerca, con o senza operatori e seleziona Cerca per inviare la richiesta. La ricerca può essere usata con i filtri sulla stessa richiesta, ma non con il completamento automatico o i suggerimenti.
Metodo di completamento automatico L'utente digita alcuni caratteri e le query vengono avviate dopo ogni nuovo carattere digitato. La risposta è una stringa completata dall'indice. Se la stringa specificata è valida, l'utente seleziona Cerca per inviare tale query al servizio.
Metodo dei suggerimenti Come nel caso del completamento automatico, l'utente digita alcuni caratteri e vengono generate query incrementali. La risposta è un elenco a discesa di documenti corrispondenti, in genere rappresentati da alcuni campi univoci o descrittivi. Se una delle selezioni è valida, l'utente ne seleziona uno e viene restituito il documento corrispondente.
Esplorazione in base a facet Una pagina mostra collegamenti di navigazione cliccabili o percorsi di navigazione che restringono l'ambito della ricerca. Una struttura di esplorazione in base a facet viene composta in modo dinamico in base a una query iniziale. Ad esempio, search=* per popolare un albero di esplorazione in base a facet composto da tutte le categorie possibili. Una struttura di spostamento in base a facet viene creata dalla risposta a una query, ma è anche un meccanismo per esprimere la query successiva. n riferimento API REST, facets è documentato come parametro di query di un'operazione Cerca documenti, ma può essere usato senza il parametro search.
Metodo filter I filtri vengono usati con i facet per restringere i risultati. È anche possibile implementare un filtro dietro la pagina, ad esempio per inizializzare la pagina con campi specifici per la lingua. In riferimento API REST $filter è documentato come parametro di query di un'operazione Cerca documenti, ma può essere usato senza il parametro search.

Effetto degli attributi di campo sulle query

Se si ha familiarità con i tipi di query e la composizione, è possibile ricordare che i parametri di una richiesta di query dipendono dagli attributi di campo in un indice. Ad esempio, solo i campi contrassegnati come ricercabili e recuperabili possono essere usati nelle query e nei risultati della ricerca. Quando si impostano i parametri search, filtere orderby nella richiesta, è necessario controllare gli attributi per evitare risultati imprevisti.

Nello screenshot seguente dell'indice di esempio degli hotel, solo gli ultimi due campi LastRenovationDate e Rating sono ordinabili, un requisito per l'uso in una "$orderby" clausola solo.

Screenshot che mostra la definizione dell'indice per l'esempio di hotel.

Per le definizioni degli attributi di campo, vedere Creare un indice (API REST).

Effetto dei token sulle query

Durante l'indicizzazione, il motore di ricerca usa un analizzatore di testo sulle stringhe per massimizzare il potenziale di ricerca di una corrispondenza in fase di query. Come minimo, le stringhe sono minuscole, ma, a seconda dell'analizzatore, possono anche essere sottoposte a lemmatizzazione e rimozione delle stop word. Le stringhe più grandi o le parole composte sono in genere separate da spazi vuoti, trattini o lineette e indicizzate come token separati.

Il punto chiave è che ciò che si ritiene che l'indice contenga e che cosa sia effettivamente in esso, può essere diverso. Se le query non restituiscono i risultati previsti, è possibile esaminare i token creati dall'analizzatore tramite Analizza testo (API REST). Per altre informazioni sulla tokenizzazione e sull'effetto sulle query, vedere Ricerca e modelli di termini parziali con caratteri speciali.

Ora che si ha una migliore comprensione del funzionamento delle richieste di query, provare le guide introduttive seguenti per un'esperienza pratica.