Esecuzione di query in Ricerca cognitiva di Azure
Ricerca cognitiva di Azure offre un linguaggio di query avanzato per supportare un'ampia gamma di scenari, dalla ricerca di testo libero ai modelli di query altamente specificati. Questo articolo descrive le richieste di query e i tipi di query che è possibile creare.
In Ricerca cognitiva una query è una specifica completa di un'operazione round trip search
, con parametri che informano sia l'esecuzione della query che la forma della risposta tornano. Per illustrare, l'esempio di query seguente chiama l'API REST (Search Documents). Si tratta di una query di testo senza parametri con un operatore booleano, destinato alla raccolta di documenti hotels-sample-index . Seleziona anche i campi restituiti nei risultati.
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
"queryType": "simple",
"searchMode": "all",
"search": "restaurant +view",
"searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags",
"select": "HotelName, Description, Address/City, Address/StateProvince, Tags",
"top": "10",
"count": "true",
"orderby": "Rating desc"
}
I parametri usati durante l'esecuzione di query includono:
queryType
imposta il parser:simple
,full
. Il parser di query semplice predefinito è ottimale per la ricerca full-text. Il parser di query Lucene completo è per costrutti di query avanzati come espressioni regolari, ricerca di prossimità, ricerca fuzzy e jolly. Questo parametro può anche essere impostato susemantic
per la ricerca semantica per la modellazione semantica avanzata nella risposta della query.searchMode
specifica se le corrispondenze sono basate su criteri "all" (privilegi di precisione) o "any" (richiami) nell'espressione. Il valore predefinito è "any".search
fornisce i criteri di corrispondenza, in genere termini o frasi intere, con o senza operatori. Qualsiasi campo attribuito come "ricercabile" nello schema di indice è un candidato per questo parametro.searchFields
limita l'esecuzione di query a campi ricercabili specifici. Durante lo sviluppo, è utile usare lo stesso elenco di campi per selezionare e cercare. In caso contrario, una corrispondenza potrebbe essere basata sui valori di campo che non è possibile visualizzare nei risultati, creando incertezza sul motivo per cui il documento è stato restituito.
Parametri usati per modellare la risposta:
select
specifica i campi da 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 corrispondenti. In questo esempio vengono restituiti solo 10 hit. È possibile usare la parte superiore e ignorare (non visualizzata) per paginare i risultati.count
indica quanti documenti nell'intero indice corrispondono in generale, che possono essere maggiori di quelli restituiti.orderby
viene usato se si desidera ordinare i risultati in base a un valore, ad esempio una classificazione o una posizione. In caso contrario, il valore predefinito consiste nell'usare il punteggio di pertinenza per classificare i risultati. Un campo deve essere attribuito come "ordinabile" per essere un candidato per questo parametro.
L'elenco precedente è rappresentativo ma non esaustivo. Per l'elenco completo dei parametri in una richiesta di query, vedere Cerca documenti (API REST).
Tipi di query
Con alcune eccezioni importanti, una richiesta di query esegue l'iterazione degli indici invertito strutturati per le analisi veloci, in cui una corrispondenza può essere trovata in qualsiasi campo, all'interno di qualsiasi numero di documenti di ricerca. In Ricerca cognitiva, la metodologia primaria per la ricerca delle corrispondenze è la ricerca full-text o i filtri, ma è anche possibile implementare altre esperienze di ricerca note come il completamento automatico o la ricerca in posizione geografica. Il resto di questo articolo riepiloga le query in Ricerca cognitiva e fornisce collegamenti a altre informazioni ed esempi.
Ricerca full-text
Se l'app di ricerca include una casella di ricerca che raccoglie input termini, la ricerca full-text è probabilmente l'operazione di query che esegue il backup di tale esperienza. La ricerca full-text accetta termini o frasi passate in un search
parametro in tutti i campi "ricercabili" nell'indice. Gli operatori booleani facoltativi nella stringa di query possono specificare criteri di inclusione o esclusione. Sia il parser semplice che il parser completo supportano la ricerca full-text.
In Ricerca cognitiva, la ricerca full-text è basata sul motore di query Apache Lucene. Le stringhe di query nella ricerca full-text subiscono analisi lessicali per rendere più efficienti le analisi. L'analisi include maiuscole e minuscole, rimuovendo parole di arresto come "the" e riducendo i termini alle forme radice primitive. L'analizzatore predefinito è Standard Lucene.
Quando si trovano i termini corrispondenti, il motore di query ricostituisce un documento di ricerca contenente la corrispondenza usando la chiave del documento o l'ID per assemblare i valori del campo, classifica i documenti in ordine di pertinenza e restituisce i primi 50 (per impostazione predefinita) nella risposta o in un numero diverso se è stato specificato top
.
Se si implementa la ricerca full-text, informazioni sul modo in cui il contenuto viene tokenizzato consente di eseguire il debug di eventuali anomalie delle query. Le query su stringhe trattine o caratteri speciali potrebbero richiedere l'uso di un analizzatore diverso dallo standard predefinito Lucene per garantire che l'indice contenga i token corretti. È possibile eseguire l'override dell'impostazione predefinita con analizzatori del linguaggio o analizzatori specializzati che modificano l'analisi lessicale. Un esempio è la parola chiave che tratta l'intero contenuto di un campo come singolo token. Ciò è 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.
Suggerimento
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 sulla ricerca booleana.
Completamento automatico e query suggerite
Il completamento automatico o i risultati suggeriti sono alternative a tale richiesta di query successive in base agli search
input di stringa parziale (dopo ogni carattere) in un'esperienza di ricerca come tipo. È possibile usare e suggestions
parametri autocomplete
insieme o separatamente, come descritto in questa esercitazione, ma non è possibile usarli con search
. Entrambi i termini completati e le query suggerite sono derivati dal contenuto dell'indice. Il motore non restituirà mai una stringa o un suggerimento non esistente nell'indice. Per altre informazioni, vedere Completamento automatico (API REST) e Suggerimenti (API REST).
Filtro ricerca
I filtri vengono ampiamente usati nelle app basate su Ricerca cognitiva. Nelle pagine dell'applicazione i filtri vengono spesso visualizzati come facet nelle strutture di spostamento dei collegamenti per il filtro diretto dall'utente. I filtri vengono usati internamente per esporre sezioni di contenuto indicizzato. Ad esempio, è possibile inizializzare una pagina di ricerca usando un filtro in una categoria di prodotti o una lingua se un indice contiene campi sia in inglese che in francese.
È anche necessario richiamare un modulo di query specializzato, come descritto nella tabella seguente. È possibile usare un filtro con una ricerca non specificata (search=*
) o con una stringa di query che include termini, frasi, operatori e modelli.
Scenario di filtro | Descrizione |
---|---|
Filtri di intervallo | In Ricerca cognitiva di Azure le query di intervallo vengono compilate usando il parametro di filtro. Per altre informazioni ed esempi, vedere Esempio di filtro intervallo. |
Esplorazione in base a facet | Nell'albero di spostamento con facet gli utenti possono selezionare facet. Quando viene supportato dai filtri, i risultati della ricerca si restringeno a ogni clic. Ogni facet è supportato da un filtro che esclude i documenti che non soddisfano più i criteri forniti dal facet. |
Nota
Il testo usato in un'espressione di filtro non viene analizzato durante l'elaborazione di query. L'input di testo è presunto essere un modello di carattere di distinzione tra maiuscole e minuscole che ha esito positivo o ha esito negativo sulla corrispondenza. Le espressioni di filtro vengono costruite usando la sintassi OData e passate in un filter
parametro in tutti i campi filtrabili nell'indice. Per altre informazioni, vedere Filtri in Ricerca cognitiva di Azure.
Ricerca geospaziale
La ricerca geospaziale corrisponde alle coordinate di latitudine e longitudine di una posizione per l'esperienza di ricerca "trova vicino" o basata su mappe. In Ricerca cognitiva di Azure è possibile implementare la ricerca geospaziale seguendo questa procedura:
- Definire un campo filtrabile di uno di questi tipi: Edm.GeographyPoint, Collection(Edm.GeographyPoint, Edm.GeographyPolygon).
- Verificare che i documenti in ingresso includano le coordinate appropriate.
- Al termine dell'indicizzazione, compilare una query che usa un filtro e una funzione spaziale geografica.
Per altre informazioni e un esempio, vedere Esempio di ricerca geospaziale.
Ricerca documento
Al contrario dei moduli di query descritti in precedenza, questo recupera un singolo documento di ricerca in base all'ID, senza ricerca o analisi dell'indice corrispondente. Viene richiesto e restituito solo il documento. Quando un utente seleziona un elemento nei risultati della ricerca, recupera il documento e popola una pagina dei dettagli con campi è una risposta tipica e un documento cerca è l'operazione che lo supporta.
Ricerca avanzata: fuzzy, jolly, prossimità, regex
Un modulo di query avanzato dipende dal parser e dagli operatori Full Lucene che attivano un comportamento di query specifico.
Tipo di query | Utilizzo | Altre informazioni ed esempi |
---|---|---|
Ricerca in campi | search Parametro queryType=full |
Compilare un'espressione di query composta destinata a un singolo campo. Esempio di ricerca in campi |
ricerca fuzzy | search Parametro queryType=full |
Corrispondenze in base alle esigenze di ortografia o di costruzione simile. Esempio di ricerca fuzzy |
ricerca per prossimità | search Parametro queryType=full |
Trova i termini vicini tra loro in un documento. Esempio di ricerca per prossimità |
aumento del termine | search Parametro queryType=full |
Classifica un documento superiore se contiene il termine con boosting, rispetto alle altre che non lo contengono. Esempio di aumento della priorità dei termini |
ricerca di espressioni regolari | search Parametro queryType=full |
Corrispondenze in base al contenuto di un'espressione regolare. Esempio di espressione regolare |
ricerca con caratteri jolly o prefisso | search parametro con *~ o ? , queryType=full |
Corrispondenze basate su un prefisso e una tilde (~ ) o un singolo carattere (? ). Esempio di ricerca con caratteri jolly |
Passaggi successivi
Per un'analisi più attenta dell'implementazione della query, esaminare gli esempi per ogni sintassi. Se non si ha bisogno di ricerca full-text, vedere più in dettaglio cosa fa il motore di query può essere una scelta altrettanto valida.