Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka
Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.
V Azure AI Vyhledávač je komponenta normalizátor, která předem zpracuje text pro porovnávání klíčových slov s poli označenými jako "filtrovatelná", "facetable" nebo "sortable". Na rozdíl od "prohledávatelných" polí, která jsou spárovaná s analyzátory textu, obsah vytvořený pro operace filtrování faset-řazení neprochází analýzou ani tokenizací. Vynechání analýzy textu může vést k neočekávaným výsledkům, když se zobrazí rozdíly velikosti písmen a znaků, což je důvod, proč potřebujete normalizátor pro homogenizaci variací v obsahu.
Použitím normalizátoru můžete dosáhnout světlých transformací textu, které zlepšují výsledky:
- Konzistentní velikost písma (například všechna malá nebo velká písmena)
- Normalizace zvýrazňujících a diakritických znamének, jako je ö nebo ê, na ekvivalentní znaky ASCII "o" a "e"
- Mapování znaků jako
-a prázdných znaků na znak zadaný uživatelem
Výhody normalizátorů
Vyhledávání a načítání dokumentů z indexu vyžaduje sladění vstupu dotazu s obsahem dokumentu. Porovnávání probíhá buď nad tokenizovaným obsahem, stejně jako v případě, že vyvoláte "Vyhledávání", nebo nad netokenizovaným obsahem, pokud je požadavek filtrem, faceta nebo operací orderby.
Vzhledem k tomu, že se neanalyzuje také ne tokenizovaný obsah, vyhodnocují se malé rozdíly v obsahu jako odlišné hodnoty. Podívejte se na následující příklady:
$filter=City eq 'Las Vegas'vrátí pouze dokumenty, které obsahují přesný text"Las Vegas", a vyloučí dokumenty obsahující"LAS VEGAS"a"las vegas", což je nedostatečné, pokud případ použití vyžaduje všechny dokumenty bez ohledu na formátování velikosti písmen.search=*&facet=City,count:5vrátí"Las Vegas","LAS VEGAS"a"las vegas"jako jedinečné hodnoty, i když jde o stejné město.search=usa&$orderby=Cityvrátí města v lexikografickém pořadí:"Las Vegas","Seattle""las vegas", , i když záměr je uspořádat stejná města dohromady bez ohledu na případ.
Normalizátor, který se vyvolá během indexování a provádění dotazů, přidává lehké transformace, které vyhladí drobné rozdíly v textu pro scénáře filtrování, facety a řazení. V předchozích příkladech by se varianty "Las Vegas" zpracovávaly podle vámi zvoleného normalizátoru (například veškerý text se převede na malá písmena) pro jednotnější výsledky.
Určení normalizátoru
Normalizátory se zadají v definici indexu na jednotlivých textových polích (Edm.String a Collection(Edm.String)), která mají alespoň jednu z vlastností "filtrovatelná", "řaditelná" nebo "sestavitelná" nastavenou na true. Nastavení normalizátoru je volitelné a ve výchozím nastavení má hodnotu null. Před konfigurací vlastního normalizátoru doporučujeme vyhodnotit předdefinované normalizátory.
Normalizátory je možné zadat pouze v případě, že do indexu přidáte nové pole. Proto, pokud je to možné, zkuste nejprve posoudit potřeby normalizace a přiřazovat normalizátory již v počátečních fázích vývoje, kdy je rutinní odstraňování a znovuvytváření indexů.
Při vytváření definice pole v indexu nastavte vlastnost normalizer na jednu z následujících hodnot: předdefinovaný normalizátor , například "malá písmena" nebo vlastní normalizátor (definovaný ve stejném schématu indexu).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "filterable": true, "analyzer": "en.microsoft", "normalizer": "lowercase" ... } ]Vlastní normalizátory jsou nejprve definovány v části "normalizátory" indexu a pak jsou přiřazeny k definici pole, jak je znázorněno v předchozím kroku. Další informace naleznete v tématu Vytvoření indexu a také Přidání vlastních normalizátorů.
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "normalizer": "my_custom_normalizer" },
Poznámka
Chcete-li změnit normalizátor existujícího pole, znovu sestavte index zcela (nelze znovu sestavit jednotlivá pole).
Dobrým alternativním řešením pro produkční indexy, kde je opětovné sestavení indexů nákladné, je vytvořit nové pole shodné se starým, ale s novým normalizátorem a použít ho místo starého. Pomocí funkce Update Index začleníte nové pole a mergeOrUpload ho naplníte. Později můžete v rámci plánované údržby indexů vyčistit index a odebrat zastaralá pole.
Předdefinované a vlastní normalizátory
Azure AI Vyhledávač poskytuje integrované normalizátory pro běžné případy použití spolu s možností přizpůsobení podle potřeby.
| Kategorie | Popis |
|---|---|
| Předdefinované normalizátory | Dodává se připravený k použití a nevyžaduje žádnou konfiguraci. |
| Vlastní normalizátory1 | V případě pokročilých scénářů. Vyžaduje uživatelsky definovanou konfiguraci kombinace existujících prvků, která se skládá z filtrů znaků a tokenů. |
(1) Vlastní normalizátory nezadávají tokenizátory, protože normalizátory vždy vytvářejí jeden token.
Testování normalizátoru
Pomocí analyzátoru testů (REST) můžete zjistit, jak normalizátor zpracovává vstup.
Požadavek
POST https://[search service name].search.windows.net/indexes/[index name]/analyze?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
"normalizer":"asciifolding",
"text": "Vis-à-vis means Opposite"
}
Reakce
HTTP/1.1 200 OK
{
"tokens": [
{
"token": "Vis-a-vis means Opposite",
"startOffset": 0,
"endOffset": 24,
"position": 0
}
]
}
Referenční dokumentace normalizátorů
Předdefinované normalizátory
| Jméno | Popis a možnosti |
|---|---|
| standard | Převádí text na malá písmena a poté provede asciifolding. |
| malá písmena | Transformuje znaky na malá písmena. |
| velká písmena | Transformuje znaky na velká písmena. |
| asciifolding | Transformuje znaky, které nejsou v bloku Základní latinka Unicode, na jejich ekvivalent ASCII, pokud existuje. Například změna à na a. |
| elision | Odebere elizi ze začátku tokenů. |
Podporované filtry znaků
Normalizátory podporují dva filtry znaků, které jsou identické s jejich protějšky ve filtrech vlastních znaků analyzátoru:
Podporované filtry tokenů
Následující seznam ukazuje filtry tokenů podporované pro normalizátory a je podmnožinou celkových filtrů tokenů používaných ve vlastních analyzátorech.
- arabská_normalizace
- asciifolding
- cjk_width
- elision
- german_normalization
- hindi_normalization
- indic_normalization
- persian_normalization
- skandinávská_normalizace
- scandinavian_folding
- sorani_normalization
- Malá písmena
- velká písmena
Přidání vlastních normalizátorů
Vlastní normalizátory jsou definovány v rámci schématu indexu. Definice obsahuje název, typ, jeden nebo více filtrů znaků a filtry tokenů. Filtry znaků a filtry tokenů jsou stavební bloky vlastního normalizátoru a zodpovídají za zpracování textu. Tyto filtry se použijí zleva doprava.
Jedná se token_filter_name_1 o název filtru tokenů a char_filter_name_1char_filter_name_2 jedná se o názvy filtrů znaků (viz podporované filtry tokenů a tabulky podporovaných filtrů znakůníže pro platné hodnoty).
"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",
...
}
]
Vlastní normalizátory je možné přidat během vytváření indexu nebo později aktualizací existujícího. Přidání vlastního normalizátoru do existujícího indexu vyžaduje, aby byl v indexu aktualizace zadán příznak allowIndexDowntime a index bude několik sekund nedostupný.
Příklad vlastního normalizátoru
Následující příklad znázorňuje vlastní definici normalizátoru s odpovídajícími filtry znaků a filtry tokenů. Vlastní možnosti pro filtry znaků a filtry tokenů se zadají samostatně jako pojmenované konstrukce a pak se na to odkazují v definici normalizátoru, jak je znázorněno níže.
Vlastní normalizátor s názvem "my_custom_normalizer" je definován v části "normalizers" definice indexu.
Normalizátor se skládá ze dvou filtrů znaků a tří filtrů tokenů: elision, malá písmena a přizpůsobený filtr asciifolding "my_asciifolding".
První znakový filtr "map_dash" nahradí všechny pomlčky podtržítkami, zatímco druhý znak "remove_whitespace" odebere všechny mezery.
{
"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
}
]
}