Vytvoření indexu pro více jazyků ve službě Azure AI Search
Pokud máte řetězce ve více jazycích, můžete při indexování a provádění dotazů připojit analyzátory jazyka, které analyzují řetězce pomocí lingvistických pravidel konkrétního jazyka. Pomocí analyzátoru jazyka získáte lepší zpracování variant znaků, interpunkce a kořenových formulářů slov.
Azure AI Search podporuje analyzátory Microsoftu a Lucene. Ve výchozím nastavení používá vyhledávací modul standard Lucene, což je jazyk nezávislý na jazyce. Pokud testování znamená, že výchozí analyzátor není dostatečný, nahraďte ho analyzátorem jazyka.
Ve službě Azure AI Search zahrnují tyto dva vzory pro podporu více jazyků:
Vytvořte indexy specifické pro jazyk, ve kterých je veškerý alfanumerický obsah ve stejném jazyce, a všechna prohledávatelná pole řetězců jsou přiřazena k použití stejného analyzátoru jazyka.
Vytvořte kombinovaný index s verzemi jednotlivých polí specifických pro jazyk (například description_en, description_fr, description_ko) a pak omezte fulltextové vyhledávání jenom na tato pole v době dotazu. Tento přístup je užitečný pro scénáře, kdy jazykové varianty jsou potřeba jenom u několika polí, jako je popis.
Tento článek se zaměřuje na kroky a osvědčené postupy pro konfiguraci a dotazování polí specifických pro jazyk v kombinovaném indexu:
- Definujte pole řetězce pro každou variantu jazyka.
- Nastavte pro každé pole analyzátor jazyka.
- V požadavku dotazu nastavte
searchFields
parametr na konkrétní pole a pak použijteselect
k vrácení pouze těch polí, která mají kompatibilní obsah.
Poznámka:
Pokud používáte velké jazykové modely ve vzoru RAG (Retrieval Augmented Generated) (RAG), můžete vytvořit výzvu k vrácení přeložených řetězců. Tento scénář je mimo rozsah tohoto článku.
Požadavky
Analýza jazyka se vztahuje na pole typu Edm.String
, která jsou searchable
a obsahují lokalizovaný text. Pokud potřebujete také překlad textu, projděte si další část a zjistěte, jestli obohacení AI vyhovuje vašim potřebám.
Neřetězcová pole a pole řetězce, která nelze prohledávat, neprocházejí lexikální analýzou a nejsou tokenizovány. Místo toho se uloží a vrátí doslovně.
Přidání překladu textu
Tento článek předpokládá, že přeložené řetězce již existují. Pokud tomu tak není, můžete služby Azure AI připojit ke kanálu rozšiřování, který během indexování vyvolá překlad textu. Překlad textu závisí na funkci indexeru a službách Azure AI, ale veškeré nastavení se provádí ve službě Azure AI Search.
Pokud chcete přidat překlad textu, postupujte takto:
Ověřte, že je váš obsah v podporovaném zdroji dat.
Vytvořte zdroj dat, který odkazuje na váš obsah.
Vytvořte sadu dovedností, která zahrnuje dovednost překladu textu.
Dovednost Překlad textu přebírá jako vstup jeden řetězec. Pokud máte více polí, můžete vytvořit sadu dovedností, která několikrát volá překlad textu, jednou pro každé pole. Alternativně můžete pomocí dovednosti Sloučení textu konsolidovat obsah více polí do jednoho dlouhého řetězce.
Vytvořte index, který obsahuje pole pro přeložené řetězce. Většina tohoto článku se zabývá návrhem indexu a definicemi polí pro indexování a dotazování obsahu ve více jazycích.
Připojte ke své sadě dovedností prostředek služeb Azure AI pro více oblastí.
Vytvořte a spusťte indexer a pak použijte doprovodné materiály v tomto článku k dotazování pouze na pole zájmu.
Tip
Překlad textu je integrovaný v průvodci importem dat. Pokud máte podporovaný zdroj dat s textem, který chcete přeložit, můžete si projít průvodce a vyzkoušet si funkci rozpoznávání jazyka a překladu před napsáním jakéhokoli kódu.
Definování polí pro obsah v různých jazycích
Ve službě Azure AI Search cílí dotazy na jeden index. Vývojáři, kteří chtějí poskytovat řetězce specifické pro jazyk v jednom vyhledávacím prostředí, obvykle definují vyhrazená pole pro ukládání hodnot: jedno pole pro anglické řetězce, jedno pro francouzštinu atd.
Vlastnost analyzer
definice pole slouží k nastavení analyzátoru jazyka. Používá se k indexování i provádění dotazů.
{
"name": "hotels-sample-index",
"fields": [
{
"name": "Description",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "en.microsoft"
},
{
"name": "Description_fr",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "fr.microsoft"
}
]
}
Sestavení a načtení indexu
Průběžný krok vytváří a naplňuje index před formulací dotazu. Tento krok zde uvádíme kvůli úplnosti. Jedním ze způsobů, jak určit dostupnost indexu, je kontrola seznamu indexů na portálu.
Omezení dotazu a oříznutí výsledků
Parametry dotazu slouží k omezení vyhledávání na konkrétní pole a následné oříznutí výsledků všech polí, která nejsou pro váš scénář užitečná.
Parametry | Účel |
---|---|
searchFields |
Omezuje fulltextové vyhledávání na seznam pojmenovaných polí. |
select |
Oříznou odpověď tak, aby obsahovala pouze zadaná pole. Ve výchozím nastavení se vrátí všechna zobrazovaná pole. Tento select parametr umožňuje vybrat, které z nich se mají vrátit. |
Vzhledem k cíli omezit vyhledávání na pole obsahující francouzské řetězce byste použili searchFields
k cílení dotazu na pole obsahující řetězce v daném jazyce.
Určení analyzátoru v požadavku na dotaz není nutné. Analyzátor jazyka v definici pole určuje analýzu textu během provádění dotazu. U dotazů, které určují více polí, se jednotlivé vyvolání různých analyzátorů jazyka zpracovávají termíny nebo fráze současně pomocí přiřazených analyzátorů pro každé pole.
Hledání ve výchozím nastavení vrátí všechna pole označená jako načítaná. Proto můžete chtít vyloučit pole, která nevyhovují prostředí vyhledávání specifickému pro jazyk, které chcete poskytnout. Konkrétně pokud jste omezili vyhledávání na pole s francouzskými řetězci, pravděpodobně chcete z výsledků vyloučit pole s anglickými řetězci. Pomocí parametru select
dotazu můžete řídit, která pole se vrátí do volající aplikace.
Příklad v REST
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2024-07-01
{
"search": "animaux acceptés",
"searchFields": "Tags, Description_fr",
"select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
"count": "true"
}
Příklad v jazyce C#
private static void RunQueries(SearchClient srchclient)
{
SearchOptions options;
SearchResults<Hotel> response;
options = new SearchOptions()
{
IncludeTotalCount = true,
Filter = "",
OrderBy = { "" }
};
options.Select.Add("HotelId");
options.Select.Add("HotelName");
options.Select.Add("Description_fr");
options.SearchFields.Add("Tags");
options.SearchFields.Add("Description_fr");
response = srchclient.Search<Hotel>("*", options);
WriteDocuments(response);
}
Zvýšení jazykových polí
Někdy jazyk agenta vydávajícího dotaz není známý, v takovém případě může být dotaz vydán pro všechna pole současně. Předvolbu IA pro výsledky v určitém jazyce je možné definovat pomocí hodnoticího profilu. V následujícím příkladu jsou shody nalezené v popisu ve francouzštině skóre vyšší vzhledem k shod v jiných jazycích:
"scoringProfiles": [
{
"name": "frenchFirst",
"text": {
"weights": { "description_fr": 2 }
}
}
]
Pak byste do žádosti o vyhledávání zahrnuli profil bodování:
POST /indexes/hotels/docs/search?api-version=2024-07-01
{
"search": "pets allowed",
"searchFields": "Tags, Description_fr",
"select": "HotelName, Tags, Description_fr",
"scoringProfile": "frenchFirst",
"count": "true"
}