Normalizzazione del testo per i filtri senza distinzione tra maiuscole e minuscole, facet e ordinamento
Importante
Questa funzionalità è disponibile in anteprima pubblica in Condizioni supplementari per l'utilizzo. L'API REST di anteprima supporta questa funzionalità.
In Ricerca di intelligenza artificiale di Azure un normalizzatore è un componente che pre-elabora il testo per la corrispondenza delle parole chiave sui campi contrassegnati come "filtrabili", "facetable" o "ordinabili". A differenza dei campi "ricercabili" full-text associati agli analizzatori di testo, il contenuto creato per le operazioni di ordinamento di facet filtro non viene sottoposto a analisi o tokenizzazione. L'omissione dell'analisi del testo può produrre risultati imprevisti quando vengono visualizzate differenze tra maiuscole e minuscole e caratteri.
Applicando un normalizzatore, è possibile ottenere trasformazioni di testo chiaro che migliorano i risultati:
- Maiuscole e minuscole coerenti ( ad esempio tutte minuscole o maiuscole)
- Normalizzare accenti e diacritici come ö o ê in caratteri equivalenti ASCII "o" e "e"
- Mappare caratteri come
-
e spazi vuoti in un carattere specificato dall'utente
Vantaggi dei normalizzatori
La ricerca e il recupero di documenti da un indice di ricerca richiede la corrispondenza dell'input della query al contenuto del documento. La corrispondenza è basata sul contenuto con token, come nel caso in cui si richiama "search" o su contenuto non tokenizzato se la richiesta è un filtro, un facet o un'operazione orderby .
Poiché anche il contenuto non tokenizzato non viene analizzato, le piccole differenze nel contenuto vengono valutate come valori distintimente diversi. Vedi gli esempi seguenti:
$filter=City eq 'Las Vegas'
restituirà solo documenti che contengono il testo esatto "Las Vegas" ed escluderà i documenti con "LAS VEGAS" e "las vegas", che è inadeguato quando il caso d'uso richiede tutti i documenti indipendentemente dalla maiuscola.search=*&facet=City,count:5
restituirà "Las Vegas", "LAS VEGAS" e "las vegas" come valori distinti nonostante sia la stessa città.search=usa&$orderby=City
restituirà le città in ordine lessicografico: "Las Vegas", "Seattle", "las vegas", anche se lo scopo è ordinare le stesse città insieme indipendentemente dal caso.
Un normalizzatore, richiamato durante l'indicizzazione e l'esecuzione di query, aggiunge trasformazioni leggere che consentono di uniformare le piccole differenze nel testo per scenari di filtro, facet e ordinamento. Negli esempi precedenti, le varianti di "Las Vegas" vengono elaborate in base al normalizzatore selezionato (ad esempio, tutto il testo è minuscolo) per ottenere risultati più uniformi.
Come specificare un normalizzatore
I normalizzatori vengono specificati in una definizione di indice, in base ai campi di testo (Edm.String
e Collection(Edm.String)
) con almeno una proprietà "filtrabile", "ordinabile" o "facetable" impostata su true. L'impostazione di un normalizzatore è facoltativa ed è Null per impostazione predefinita. È consigliabile valutare i normalizzatori predefiniti prima di configurarne uno personalizzato.
I normalizzatori possono essere specificati solo quando si aggiunge un nuovo campo all'indice, quindi, se possibile, provare a valutare le esigenze di normalizzazione prima e assegnare normalizzatori nelle fasi iniziali dello sviluppo durante l'eliminazione e la ricreazione degli indici è routine.
Quando si crea una definizione di campo nell'indice, impostare la proprietà "normalizer" su uno dei valori seguenti: un normalizzatore predefinito, ad esempio "minuscolo" o un normalizzatore personalizzato (definito nello stesso schema di indice).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": true, "analyzer": "en.microsoft", "normalizer": "lowercase" ... } ]
I normalizzatori personalizzati vengono definiti nella sezione "normalizer" dell'indice e quindi assegnati alla definizione del campo, come illustrato nel passaggio precedente. Per altre informazioni, vedere Creare un indice e aggiungere normalizzatori personalizzati.
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "normalizer": "my_custom_normalizer" },
Nota
Per modificare il normalizzatore di un campo esistente, è necessario ricompilare completamente l'indice (non è possibile ricompilare singoli campi).
Una buona soluzione alternativa per gli indici di produzione, in cui la ricompilazione degli indici è costosa, consiste nel creare un nuovo campo identico a quello precedente, ma con il nuovo normalizzatore e usarlo al posto di quello precedente. Usare Aggiornare un indice per incorporare il nuovo campo e mergeOrUpload per compilarlo. In un secondo momento, nell'ambito della manutenzione pianificata dell'indice, sarà possibile pulire l'indice per rimuovere i campi obsoleti.
Normalizzatori predefiniti e personalizzati
Ricerca di intelligenza artificiale di Azure offre normalizzatori predefiniti per i casi d'uso comuni e la possibilità di personalizzare in base alle esigenze.
Categoria | Descrizione |
---|---|
Normalizzatori predefiniti | Fornito out-of-the-box e può essere usato senza alcuna configurazione. |
Normalizzatoripersonalizzati 1 | Per scenari avanzati. Richiede la configurazione definita dall'utente di una combinazione di elementi esistenti, costituiti da filtri char e token. |
(1) I normalizzatori personalizzati non specificano tokenizzatori perché i normalizzatori producono sempre un singolo token.
Informazioni di riferimento su Normalizer
Normalizzatori predefiniti
Nome | Descrizione e opzioni |
---|---|
standard | Minuscole il testo seguito dalla asciifolding. |
lowercase | Trasforma i caratteri in lettere minuscole. |
uppercase | Trasforma i caratteri in maiuscolo. |
asciifolding | Trasforma i caratteri che non si trovano nel blocco Unicode latino di base nell'equivalente ASCII, se presente. Ad esempio, la modifica di à in a. |
elision | Rimuove l'elisione dall'inizio dei token. |
Filtri char supportati
I normalizzatori supportano due filtri di caratteri identici alle rispettive controparti nei filtri dei caratteri dell'analizzatore personalizzato:
Filtri di token supportati
L'elenco seguente mostra i filtri di token supportati per i normalizzatori ed è un subset dei filtri di token complessivi usati negli analizzatori personalizzati.
- arabic_normalization
- asciifolding
- cjk_width
- elision
- german_normalization
- hindi_normalization
- indic_normalization
- persian_normalization
- scandinavian_normalization
- scandinavian_folding
- sorani_normalization
- lowercase
- uppercase
Aggiungere normalizzatori personalizzati
I normalizzatori personalizzati vengono definiti all'interno dello schema dell'indice. La definizione include un nome, un tipo, uno o più filtri di caratteri e filtri token. I filtri di caratteri e i filtri dei token sono i blocchi predefiniti per un normalizzatore personalizzato e responsabili dell'elaborazione del testo. Questi filtri vengono applicati da sinistra a destra.
token_filter_name_1
è il nome del filtro del token e char_filter_name_2
char_filter_name_1
sono i nomi dei filtri char (vedere filtri di token supportati e tabelle di filtrichar supportati di seguito per i valori validi).
"normalizers":(optional)[
{
"name":"name of normalizer",
"@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
"charFilters":[
"char_filter_name_1",
"char_filter_name_2"
],
"tokenFilters":[
"token_filter_name_1"
]
}
],
"charFilters":(optional)[
{
"name":"char_filter_name_1",
"@odata.type":"#char_filter_type",
"option1": "value1",
"option2": "value2",
...
}
],
"tokenFilters":(optional)[
{
"name":"token_filter_name_1",
"@odata.type":"#token_filter_type",
"option1": "value1",
"option2": "value2",
...
}
]
I normalizzatori personalizzati possono essere aggiunti durante la creazione dell'indice o versioni successive aggiornando uno esistente. Per aggiungere un normalizzatore personalizzato a un indice esistente è necessario specificare il flag "allowIndexDowntime" in Update Index e l'indice non sarà disponibile per alcuni secondi.
Esempio di normalizzatore personalizzato
L'esempio seguente illustra una definizione di normalizzatore personalizzata con filtri di caratteri e filtri token corrispondenti. Le opzioni personalizzate per i filtri di caratteri e i filtri token vengono specificate separatamente come costrutti denominati e quindi viene fatto riferimento nella definizione di normalizer, come illustrato di seguito.
Nella sezione "normalizer" della definizione dell'indice viene definito un normalizzatore personalizzato denominato "my_custom_normalizer".
Il normalizer è composto da due filtri di caratteri e tre filtri di token: elisione, minuscola e filtro di asciifolding personalizzato "my_asciifolding".
Il primo filtro di caratteri "map_dash" sostituisce tutti i trattini con caratteri di sottolineatura mentre il secondo "remove_whitespace" rimuove tutti gli spazi.
{
"name":"myindex",
"fields":[
{
"name":"id",
"type":"Edm.String",
"key":true,
"searchable":false,
},
{
"name":"city",
"type":"Edm.String",
"filterable": true,
"facetable": true,
"normalizer": "my_custom_normalizer"
}
],
"normalizers":[
{
"name":"my_custom_normalizer",
"@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
"charFilters":[
"map_dash",
"remove_whitespace"
],
"tokenFilters":[
"my_asciifolding",
"elision",
"lowercase",
]
}
],
"charFilters":[
{
"name":"map_dash",
"@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
"mappings":["-=>_"]
},
{
"name":"remove_whitespace",
"@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
"mappings":["\\u0020=>"]
}
],
"tokenFilters":[
{
"name":"my_asciifolding",
"@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
"preserveOriginal":true
}
]
}
Vedi anche
Concetti di query in Ricerca di intelligenza artificiale di Azure
Search Documents REST API (API REST di Ricerca di documenti)