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.
Note
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.
Analyzátor je součástí fulltextového vyhledávacího webu, který je zodpovědný za zpracování řetězců během indexování a provádění dotazů. Zpracování textu (označované také jako lexikální analýza) je transformativní a upravuje řetězec prostřednictvím akcí, jako jsou tyto:
- Odstranění nevýznamných slov (stopwords) a interpunkce
- Rozdělte fráze a slova s pomlčkami na jednotlivé části
- Změnit velká písmena na malá písmena
- Zmenšete slova do primitivních kořenových formulářů pro efektivitu úložiště, aby bylo možné najít shody bez ohledu na čas.
Výstup lexikálního analyzátoru je posloupnost tokenů.
Lexikální analýza se vztahuje na Edm.String pole označená jako "prohledávatelná", která označují fulltextové vyhledávání. U polí této konfigurace probíhá analýza během indexování při vytváření tokenů a při provádění dotazů, když se dotazy analyzují, a modul vyhledá odpovídající tokeny. K shodě pravděpodobně dojde, když se stejný analyzátor používá pro indexování i dotazy, ale analyzátor pro každé pracovní zatížení můžete nastavit nezávisle v závislosti na vašich požadavcích.
Typy dotazů, které nejsou fulltextové vyhledávání, jako jsou filtry nebo přibližné vyhledávání, neprocházejí fází analýzy na straně dotazu. Analyzátor místo toho tyto řetězce odešle přímo do vyhledávacího webu pomocí vzoru, který zadáte jako základ shody. Tyto formuláře dotazu obvykle vyžadují tokeny celého řetězce, aby porovnávání vzorů fungovalo správně. Aby se zajistilo, že se během indexování zachovají celé tokeny termínů, budete možná potřebovat vlastní analyzátory. Další informace o tom, kdy a proč se analyzují termíny dotazů, najdete v tématu Fulltextové vyhledávání ve službě Azure AI Vyhledávač.
Další informace o lexikální analýze najdete v následujícím videoklipu s stručným vysvětlením.
Výchozí analyzátor
Ve službě Azure AI Vyhledávač se analyzátor automaticky vyvolá u všech řetězcových polí označených jako prohledávatelná.
Azure AI Vyhledávač ve výchozím nastavení používá analýzátor Apache Lucene Standard (standard lucene), který rozděluje text na prvky podle pravidel segmentace textu Unicode. Standardní analyzátor převede všechny znaky na jejich malá písmena. Indexované dokumenty i hledané termíny procházejí analýzou během indexování a zpracování dotazů.
Výchozí nastavení můžete přepsat na úrovni jednotlivých polí. Alternativní analyzátory jsou:
- Analyzátor jazyka pro lingvistické zpracování
- vlastní analyzátor pro vlastní konfigurace
- integrované analyzátory pro použití v as-is
Typy analyzátorů
Následující seznam popisuje, které analyzátory jsou dostupné ve službě Azure AI Vyhledávač.
| Kategorie | Popis |
|---|---|
| Standardní analyzátor Lucene | Výchozí. Není vyžadována žádná specifikace ani konfigurace. Tento analyzátor pro obecné účely funguje dobře pro mnoho jazyků a scénářů. |
| Integrované analyzátory | Využívá se tak, jak je, a odkazuje se podle názvu. Jsou dva typy: jazykové a nezávislé na jazyce.
Specializované analyzátory (nezávislé na jazyce) se používají, když textové vstupy vyžadují specializované zpracování nebo minimální zpracování. Mezi příklady analyzátorů v této kategorii patří Asciifolding, Keyword, Pattern, Simple, Stop, Whitespace. Jazykové analyzátory se používají, když potřebujete bohatou jazykovou podporu pro jednotlivé jazyky. Azure AI Vyhledávač podporuje 35 analyzátorů jazyka Lucene a 50 analyzátorů zpracování přirozeného jazyka Microsoftu. |
| Vlastní analyzátory | Odkazuje na uživatelsky definovanou konfiguraci kombinace existujících prvků, která se skládá z jednoho tokenizátoru (povinné) a volitelných filtrů (znak nebo token). |
Několik integrovaných analyzátorů, jako Pattern nebo Stop, podporuje omezenou sadu možností konfigurace. Pokud chcete tyto možnosti nastavit, vytvořte vlastní analyzátor, který se skládá z integrovaného analyzátoru a jedné z alternativních možností zdokumentovaných v integrovaných analyzátorech. Stejně jako u jakékoli vlastní konfigurace zadejte novou konfiguraci s názvem, například myPatternAnalyzer , abyste ji odlišili od analyzátoru Lucene Pattern.
Určení analyzátorů
Nastavení analyzátoru je volitelné. Obecně platí, že nejprve zkuste použít výchozí standardní analyzátor Lucene, abyste zjistili, jak funguje. Pokud se dotazům nepodaří vrátit očekávané výsledky, přepnutí na jiný analyzátor je často správným řešením.
Pokud používáte vlastní analyzátor, přidejte ho do indexu vyhledávání v části Analyzátor. Další informace najdete v tématu Vytvoření indexu a přidání vlastních analyzátorů.
Při definování pole nastavte vlastnost "analyzer" na jednu z následujících možností: vestavěný analyzátor, například 'keyword', jazykový analyzátor nebo vlastní analyzátor (definovaný ve stejném schématu indexu).
"fields": [ { "name": "Description", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": "en.microsoft", "indexAnalyzer": null, "searchAnalyzer": null },Pokud používáte analyzátor jazyka, musíte k jeho zadání použít vlastnost "analyzer". Vlastnosti "searchAnalyzer" a "indexAnalyzer" se nevztahují na analyzátory jazyka.
Případně můžete nastavit indexAnalyzer a searchAnalyzer tak, aby se analyzátor pro jednotlivé úlohy lišil. Tyto vlastnosti spolupracují jako náhrada vlastnosti "analyzer", která musí mít hodnotu null. Pro indexování a dotazy můžete použít různé analyzátory, pokud jedna z těchto aktivit vyžadovala konkrétní transformaci, kterou druhá nevyžaduje.
"fields": [ { "name": "ProductGroup", "type": "Edm.String", "retrievable": true, "searchable": true, "analyzer": null, "indexAnalyzer": "keyword", "searchAnalyzer": "standard" },
Kdy přidat analyzátory
Nejlepší dobou pro přidávání a přiřazování analyzátorů je období aktivního vývoje, kdy je rutinní mazat a znovu vytvářet indexy.
Vzhledem k tomu, že analyzátory se používají k tokenizaci termínů, měli byste při vytváření pole přiřadit analyzátor. Ve skutečnosti přiřazení analyzátoru nebo indexAnalyzer k poli, které již bylo fyzicky vytvořeno, není povoleno (ačkoli vlastnost searchAnalyzer můžete kdykoli změnit bez dopadu na index).
Pokud chcete změnit analyzátor existujícího pole, budete muset odstranit a znovu vytvořit celý index (nemůžete znovu sestavit jednotlivá pole). U indexů v produkčním prostředí můžete odložit opětovné sestavení vytvořením nového pole s novým přiřazením analyzátoru a začít ho používat 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.
Pokud chcete přidat nové pole do existujícího indexu, zavolejte update Index , aby se toto pole přidalo, a mergeOrUpload ho naplňte.
Chcete-li přidat vlastní analyzátor do existujícího indexu, předejte flag allowIndexDowntime v Update Index, pokud se chcete této chybě vyhnout:
"Index update not allowed because it would cause downtime. In order to add new analyzers, tokenizers, token filters, or character filters to an existing index, set the 'allowIndexDowntime' query parameter to 'true' in the index update request. Note that this operation will put your index offline for at least a few seconds, causing your indexing and query requests to fail. Performance and write availability of the index can be impaired for several minutes after the index is updated, or longer for very large indexes."
Doporučení pro práci s analyzátory
Tato část obsahuje rady, jak pracovat s analyzátory.
Jeden analyzátor pro čtení i zápis, pokud nemáte specifické požadavky
Azure AI Vyhledávač umožňuje zadat různé analyzátory pro indexování a prohledávat vlastnosti pole "indexAnalyzer" a "searchAnalyzer". Pokud není specifikován, analyzátor nastavený prostřednictvím vlastnosti analyzátoru se použije jak pro indexování, tak i pro vyhledávání. Pokud není analyzátor zadaný, použije se výchozí standardní analyzátor Lucene.
Obecné pravidlo je použít stejný analyzátor pro indexování i dotazování, pokud konkrétní požadavky diktují jinak. Nezapomeňte důkladně testovat. Pokud se zpracování textu při hledání a indexování liší, riskujete neshodu mezi termíny dotazu a indexovanými termíny, když konfigurace analyzátoru vyhledávání a indexování nejsou zarovnané.
Testování během aktivního vývoje
Přepsání standardního analyzátoru vyžaduje opětovné sestavení indexu. Pokud je to možné, před uvedením indexu do produkčního prostředí se rozhodněte, které analyzátory se mají použít během aktivního vývoje.
Kontrola tokenizovaných termínů
Pokud hledání nevrátí očekávané výsledky, nejpravděpodobnějším scénářem jsou nesrovnalosti tokenů mezi vstupy termínů v dotazu a tokenizovanými termíny v indexu. Pokud tokeny nejsou stejné, shoda se nepodaří materializovat. Pokud chcete zkontrolovat výstup tokenizátoru, doporučujeme použít rozhraní API pro analýzu jako nástroj pro šetření. Odpověď se skládá z tokenů vygenerovaných konkrétním analyzátorem.
Příklady REST
Následující příklady ukazují definice analyzátoru pro několik klíčových scénářů.
- Příklad vlastního analyzátoru
- Přiřazení analyzátorů k příkladu pole
- Kombinování analyzátorů pro indexování a vyhledávání
- Příklad analyzátoru jazyka
Příklad vlastního analyzátoru
Tento příklad znázorňuje definici analyzátoru s vlastními možnostmi. Vlastní možnosti pro filtry znaků, tokenizátory a filtry tokenů se zadají samostatně jako pojmenované konstrukty a následně odkazují v definici analyzátoru. Předdefinované prvky se používají v původní podobě a jsou odkazovány podle názvu.
Projděte si tento příklad:
Analyzátory jsou vlastností třídy pole pro prohledávatelné pole.
Vlastní analyzátor je součástí definice indexu. Může se mírně přizpůsobit (například přizpůsobit jednu možnost v jednom filtru) nebo přizpůsobit na více místech.
V tomto případě je vlastní analyzátor "my_analyzer", který používá přizpůsobený standardní tokenizátor "my_standard_tokenizer" a dva filtry tokenů: filtr pro malá písmena a přizpůsobený filtr asciifolding "my_asciifolding".
Definuje také 2 vlastní filtry znaků "map_dash" a "remove_whitespace". První nahradí všechny pomlčky podtržítkami, zatímco druhý odebere všechny mezery. V pravidlech mapování musí být mezery zakódovány ve formátu UTF-8. Filtry znaků se použijí před tokenizací a ovlivní výsledné tokeny (standardní tokenizátor rozdělí tok na pomlčkách i mezerách, ale ne na podtržítku).
{
"name":"myindex",
"fields":[
{
"name":"id",
"type":"Edm.String",
"key":true,
"searchable":false
},
{
"name":"text",
"type":"Edm.String",
"searchable":true,
"analyzer":"my_analyzer"
}
],
"analyzers":[
{
"name":"my_analyzer",
"@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
"charFilters":[
"map_dash",
"remove_whitespace"
],
"tokenizer":"my_standard_tokenizer",
"tokenFilters":[
"my_asciifolding",
"lowercase"
]
}
],
"charFilters":[
{
"name":"map_dash",
"@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
"mappings":["-=>_"]
},
{
"name":"remove_whitespace",
"@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
"mappings":["\\u0020=>"]
}
],
"tokenizers":[
{
"name":"my_standard_tokenizer",
"@odata.type":"#Microsoft.Azure.Search.StandardTokenizerV2",
"maxTokenLength":20
}
],
"tokenFilters":[
{
"name":"my_asciifolding",
"@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
"preserveOriginal":true
}
]
}
Příklad přiřazení analyzátoru pro jednotlivá pole
Standardní analyzátor je výchozí hodnota. Předpokládejme, že chcete výchozí hodnotu nahradit jiným předdefinovaným analyzátorem, například analyzátorem vzoru. Pokud nenastavujete vlastní možnosti, stačí je zadat jenom podle názvu v definici pole.
Element "analyzer" přepíše standardní analyzátor ve vztahu k jednotlivým polím. Neexistuje žádné globální překrytí. V tomto příkladu text1 používá analyzátor vzorů, text2který nezadává analyzátor, používá výchozí hodnotu.
{
"name":"myindex",
"fields":[
{
"name":"id",
"type":"Edm.String",
"key":true,
"searchable":false
},
{
"name":"text1",
"type":"Edm.String",
"searchable":true,
"analyzer":"pattern"
},
{
"name":"text2",
"type":"Edm.String",
"searchable":true
}
]
}
Kombinování analyzátorů pro indexování a vyhledávací operace
Rozhraní API obsahují atributy indexu pro zadání různých analyzátorů pro indexování a vyhledávání. Atributy searchAnalyzer a indexAnalyzer musí být zadány jako pár, přičemž nahradí jeden atribut analyzátoru.
{
"name":"myindex",
"fields":[
{
"name":"id",
"type":"Edm.String",
"key":true,
"searchable":false
},
{
"name":"text",
"type":"Edm.String",
"searchable":true,
"indexAnalyzer":"whitespace",
"searchAnalyzer":"simple"
},
],
}
Příklad analyzátoru jazyka
Pole obsahující řetězce v různých jazycích můžou používat analyzátor jazyka, zatímco jiná pole zachovají výchozí hodnotu (nebo používají jiný předdefinovaný nebo vlastní analyzátor). Pokud používáte analyzátor jazyka, musí se použít pro operace indexování i vyhledávání. Pole, která používají analyzátor jazyka, nemůžou mít různé analyzátory pro indexování a vyhledávání.
{
"name":"myindex",
"fields":[
{
"name":"id",
"type":"Edm.String",
"key":true,
"searchable":false
},
{
"name":"text",
"type":"Edm.String",
"searchable":true,
"indexAnalyzer":"whitespace",
"searchAnalyzer":"simple"
},
{
"name":"text_fr",
"type":"Edm.String",
"searchable":true,
"analyzer":"fr.lucene"
}
],
}
Příklady jazyka C#
Pokud používáte ukázky kódu sady .NET SDK, můžete tyto příklady připojit k použití nebo konfiguraci analyzátorů.
Přiřazení analyzátoru jazyka
Každý analyzátor, který se používá tak, jak je, bez konfigurace, se zadává v definici pole. Není nutné vytvořit položku v části [analyzátory] indexu.
Analyzátory jazyka se používají tak, jak jsou. Pokud je chcete použít, zavolejte LexicalAnalyzer a zadejte typ LexicalAnalyzerName , který poskytuje textový analyzátor podporovaný ve službě Azure AI Vyhledávač.
Vlastní analyzátory jsou podobně zadané v definici pole, ale aby to fungovalo, musíte zadat analyzátor v definici indexu, jak je popsáno v další části.
public partial class Hotel
{
. . .
[SearchableField(AnalyzerName = LexicalAnalyzerName.EnLucene)]
public string Description { get; set; }
[SearchableField(AnalyzerName = LexicalAnalyzerName.FrLucene)]
[JsonPropertyName("Description_fr")]
public string DescriptionFr { get; set; }
[SearchableField(AnalyzerName = "url-analyze")]
public string Url { get; set; }
. . .
}
Definování vlastního analyzátoru
Pokud je potřeba přizpůsobení nebo konfigurace, přidejte do indexu analyzátorový konstruktor. Jakmile ji definujete, můžete ji přidat jako definici pole, jak je znázorněno v předchozím příkladu.
Vytvořte objekt CustomAnalyzer . Vlastní analyzátor je uživatelsky definovaná kombinace známého tokenizátoru, nulového nebo více filtrů tokenů a nulových nebo více názvů filtrů znaků:
Následující příklad vytvoří vlastní analyzátor s názvem url-analyze, který používá tokenizátor uax_url_email a filtr tokenů malými písmeny.
private static void CreateIndex(string indexName, SearchIndexClient adminClient)
{
FieldBuilder fieldBuilder = new FieldBuilder();
var searchFields = fieldBuilder.Build(typeof(Hotel));
var analyzer = new CustomAnalyzer("url-analyze", LexicalTokenizerName.UaxUrlEmail)
{
TokenFilters = { LexicalTokenFilterName.Lowercase }
};
var definition = new SearchIndex(indexName, searchFields);
definition.Analyzers.Add(analyzer);
adminClient.CreateOrUpdateIndex(definition);
}
Další kroky
Podrobný popis provádění dotazů najdete v fulltextovém vyhledávání ve službě Azure AI Vyhledávač. Tento článek používá příklady k vysvětlení chování, které se na povrchu můžou zdát neintuitivní.
Další informace o analyzátorech najdete v následujících článcích: