Aggiungere il controllo ortografico alle query in Azure AI Search
Importante
La correzione ortografia è disponibile in anteprima pubblica in condizioni supplementari per l'utilizzo. È disponibile tramite il portale di Azure, le API REST di anteprima e le versioni beta delle librerie di SDK di Azure.
È possibile migliorare il richiamo correggendo l’ortografia delle parole di una query prima che raggiungano il motore di ricerca. Il parametro speller
è supportato per tutti i tipi di query di testo (non vettoriali).
Prerequisiti
Servizio di ricerca al livello Basic o superiore, in qualsiasi area.
Indice di ricerca esistente con contenuti in una lingua supportata.
Richiesta di query con
speller=lexicon
equeryLanguage
impostati su una lingua supportata. Il controllo ortografico funziona sulle stringhe passate nel parametrosearch
. Non è supportato per filtri, ricerca fuzzy, ricerca con caratteri jolly, espressioni regolari o query vettoriali.
Usare un client di ricerca che supporta le API di anteprima nella richiesta di query. È possibile usare un client REST o versioni beta degli SDK di Azure.
Libreria client | Versioni |
---|---|
REST API | Versioni 2020-06-30 anteprima e successive. È consigliabile usare l'API di anteprima più recente. 2024-05-01-anteprima |
Azure SDK per .NET | versione 11.5.0-beta.5 |
Azure SDK per Java | versione 11.6.0-beta.5 |
Azure SDK per JavaScript | versione 11.3.0-beta.8 |
Azure SDK per Python | versione 11.4.0b3 |
Correzione ortografia nella ricerca semplice
Nell'esempio seguente viene riportato l'indice hotels-sample predefinito per illustrare la correzione ortografia in una semplice query di testo. Senza correzione ortografia, la query restituisce zero risultati. Con la correzione, la query restituisce un risultato per il resort di Johnson pensato per le famiglie.
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview
{
"search": "famly acitvites",
"speller": "lexicon",
"queryLanguage": "en-us",
"queryType": "simple",
"select": "HotelId,HotelName,Description,Category,Tags",
"count": true
}
Correzione ortografia nelle query Lucene complete
La correzione ortografica è applicata a singoli termini di query che vengono sottoposti ad analisi del testo, motivo per cui è possibile usare il parametro del correttore ortografico con alcune query Lucene, ma non con altre.
- I moduli di query incompatibili che ignorano l'analisi del testo includono: carattere jolly, regex, fuzzy
- I moduli di query compatibili includono: ricerca per campi, prossimità, boosting dei termini
In questo esempio viene usata la ricerca per campi nel campo Categoria, con la sintassi Lucene completa e un termine di query con errori di ortografia. Includendo il correttore ortografico, l'errore di battitura in "Suiite" viene corretto e la query ha esito positivo.
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview
{
"search": "Category:(Resort and Spa) OR Category:Suiite",
"queryType": "full",
"speller": "lexicon",
"queryLanguage": "en-us",
"select": "Category",
"count": true
}
Correzione ortografia nella classificazione semantica
Questa query, con errori di battitura in tutti i termini tranne uno, viene sottoposta a correzioni ortografiche in modo che restituisca risultati pertinenti. Per altre informazioni, vedere Configurare il classificatore semantico.
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-05-01-preview
{
"search": "hisotoric hotell wiht great restrant nad wiifi",
"queryType": "semantic",
"speller": "lexicon",
"queryLanguage": "en-us",
"searchFields": "HotelName,Tags,Description",
"select": "HotelId,HotelName,Description,Category,Tags",
"count": true
}
Lingue supportate
I valori validi di queryLanguage
sono disponibili nella tabella seguente, copiati dall'elenco delle lingue supportate (riferimento API REST).
Lingua | queryLanguage |
---|---|
Inglese [EN] | EN, EN-US (impostazione predefinita) |
Spagnolo [ES] | ES, ES-ES (impostazione predefinita) |
Francese [FR] | FR, FR-FR (impostazione predefinita) |
Tedesco [DE] | DE, DE-DE (impostazione predefinita) |
Olandese [NL] | NL, NL-BE, NL-NL (impostazione predefinita) |
Nota
In precedenza, quando il classificatore semantico era in anteprima pubblica, anche il parametro queryLanguage
veniva usato per la classificazione semantica. Il classificatore semantico è ora indipendente dal linguaggio.
Considerazioni sull'analizzatore della lingua
Gli indici che hanno contenuti in una lingua diversa dall’inglese spesso usano analizzatori della lingua nei campi non in inglese, per applicare le regole linguistiche della lingua nativa.
Quando si aggiunge il controllo ortografico ai contenuti, che vengono sottoposti anche all'analisi della lingua, è possibile ottenere risultati migliori usando la stessa lingua per ogni passaggio di indicizzazione ed elaborazione delle query. Ad esempio, se il contenuto di un campo è stato indicizzato usando l'analizzatore della lingua "fr.microsoft", anche le query e il controllo ortografico dovrebbero usare un lessico francese o una libreria linguistica di qualche tipo.
Per riepilogare il modo in cui vengono usate le librerie linguistiche in Azure AI Search:
Gli analizzatori della lingua possono essere richiamati durante l'indicizzazione e l'esecuzione di query, e sono Apache Lucene (ad esempio, "de.lucene") o Microsoft ("de.microsoft”).
I lessici della lingua richiamati durante il controllo ortografico vengono specificati usando uno dei codici lingua della tabella con le lingue supportate.
In una richiesta di query il valore assegnato a queryLanguage
si applica a speller
.
Nota
La coerenza linguistica nei diversi valori delle proprietà è un problema solo se si usano analizzatori della lingua. Se si usano analizzatori indipendenti dalla lingua (ad esempio keyword, simple, standard, stop, whitespace, or standardasciifolding.lucene
), il valore queryLanguage
può essere quello desiderato.
Anche se il contenuto di un indice di ricerca può essere composto da più lingue, l'input della query probabilmente sarà in una sola. Il motore di ricerca non verifica la compatibilità di queryLanguage
, l'analizzatore della lingua e la lingua nella quale è composto il contenuto, quindi assicurarsi di definire di conseguenza l'ambito della query per evitare di produrre risultati non corretti.