Příklad: Přidání synonym pro Azure AI Search v jazyce C#

Synonyma rozšiřují dotaz tak, že odpovídají termínům, které jsou považovány za sémanticky ekvivalentní vstupnímu termínu. Můžete například chtít, aby "auto" odpovídalo dokumentům obsahujícím termíny "automobil" nebo "vozidlo".

Ve službě Azure AI Search se synonyma definují v mapě synonym prostřednictvím pravidel mapování , která přidružují ekvivalentní termíny. Tento příklad popisuje základní kroky pro přidání a použití synonym s existujícím indexem.

V tomto příkladu se naučíte:

Pole s povoleným synonymem můžete dotazovat jako obvykle. Pro přístup ke synonymům není nutná žádná další syntaxe dotazu.

Můžete vytvořit více map synonym, publikovat je jako prostředek pro celou službu dostupný pro libovolný index a pak odkazovat na to, který z nich se má použít na úrovni pole. Kromě vyhledávání v indexu azure AI Search v době dotazu provede vyhledávání v mapě synonym, pokud je zadaný v polích použitých v dotazu.

Poznámka:

Synonyma se dají vytvářet programově, ale ne na portálu.

Požadavky

Mezi požadavky na kurz patří:

Pokud neznáte klientskou knihovnu .NET, přečtěte si téma Použití služby Azure AI Search v .NET.

Ukázkový kód

Úplný zdrojový kód ukázkové aplikace použité v tomto příkladu najdete na GitHubu.

Přehled

Před a po dotazech se používají k předvedení hodnoty synonym. V tomto příkladu ukázková aplikace spustí dotazy a vrátí výsledky na ukázkovém indexu "hotels" naplněném dvěma dokumenty. Nejprve aplikace spustí vyhledávací dotazy pomocí termínů a frází, které se v indexu nezobrazují. Za druhé kód povolí funkci synonym a pak znovu vrátí stejné dotazy, tentokrát vrátí výsledky na základě shody v mapě synonym.

Následující kód ukazuje celkový tok.

static void Main(string[] args)
{
   SearchIndexClient indexClient = CreateSearchIndexClient();

   Console.WriteLine("Cleaning up resources...\n");
   CleanupResources(indexClient);

   Console.WriteLine("Creating index...\n");
   CreateHotelsIndex(indexClient);

   SearchClient searchClient = indexClient.GetSearchClient("hotels");

   Console.WriteLine("Uploading documents...\n");
   UploadDocuments(searchClient);

   SearchClient searchClientForQueries = CreateSearchClientForQueries();

   RunQueriesWithNonExistentTermsInIndex(searchClientForQueries);

   Console.WriteLine("Adding synonyms...\n");
   UploadSynonyms(indexClient);

   Console.WriteLine("Enabling synonyms in the test index...\n");
   EnableSynonymsInHotelsIndexSafely(indexClient);
   Thread.Sleep(10000); // Wait for the changes to propagate

   RunQueriesWithNonExistentTermsInIndex(searchClientForQueries);

   Console.WriteLine("Complete.  Press any key to end application...\n");

   Console.ReadKey();
}

Dotazy "Před"

V RunQueriesWithNonExistentTermsInIndexpřípadě problémů s vyhledávacími dotazy s "pětihvězdičkovými", "internetem" a "economy AND hotelem".

Dotazy frází, například "pět hvězdiček", musí být uzavřeny do uvozovek a v závislosti na vašem klientovi můžou také vyžadovat řídicí znaky.

Console.WriteLine("Search the entire index for the phrase \"five star\":\n");
results = searchClient.Search<Hotel>("\"five star\"", searchOptions);
WriteDocuments(results);

Console.WriteLine("Search the entire index for the term 'internet':\n");
results = searchClient.Search<Hotel>("internet", searchOptions);
WriteDocuments(results);

Console.WriteLine("Search the entire index for the terms 'economy' AND 'hotel':\n");
results = searchClient.Search<Hotel>("economy AND hotel", searchOptions);
WriteDocuments(results);

Ani jeden z těchto dvou indexovaných dokumentů neobsahuje termíny, takže získáme následující výstup z prvního RunQueriesWithNonExistentTermsInIndex: žádný dokument neodpovídá.

Povolení synonym

Po spuštění dotazů "před" vzorový kód povolí synonyma. Povolení synonym je dvoustupňový proces. Nejprve definujte a nahrajte pravidla synonym. Za druhé nakonfigurujte pole tak, aby je používala. Proces je popsán v UploadSynonyms a EnableSynonymsInHotelsIndex.

  1. Přidejte mapu synonym do vyhledávací služby. V UploadSynonyms, definujeme čtyři pravidla v mapě synonym 'desc-synonymmap' a nahrajeme je do služby.

    private static void UploadSynonyms(SearchIndexClient indexClient)
    {
       var synonymMap = new SynonymMap("desc-synonymmap", "hotel, motel\ninternet,wifi\nfive star=>luxury\neconomy,inexpensive=>budget");
    
       indexClient.CreateOrUpdateSynonymMap(synonymMap);
    }
    
  2. Nakonfigurujte prohledávatelná pole tak, aby používala mapu synonym v definici indexu. V AddSynonymMapsToFields povolíme synonyma ve dvou polích category a tags nastavením vlastnosti SynonymMapNames na název nově nahrané mapy synonym.

    private static SearchIndex AddSynonymMapsToFields(SearchIndex index)
    {
       index.Fields.First(f => f.Name == "category").SynonymMapNames.Add("desc-synonymmap");
       index.Fields.First(f => f.Name == "tags").SynonymMapNames.Add("desc-synonymmap");
       return index;
    }
    

    Když přidáte mapu synonym, opětovné sestavení indexu se nevyžaduje. Do služby můžete přidat mapu synonym a kdykoli změnit existující definice polí v libovolném indexu, aby se použila nová mapa synonym. Totéž platí pro zakázání synonym pro pole. Vlastnost můžete nastavit SynonymMapNames na prázdný seznam.

    index.Fields.First(f => f.Name == "category").SynonymMapNames.Add("desc-synonymmap");
    

Dotazy "After"

Po nahrání mapy synonym a aktualizaci indexu tak, aby používal mapu synonym, druhé volání RunQueriesWithNonExistentTermsInIndex vypíše odpověď:

Search the entire index for the phrase "five star":

Name: Fancy Stay        Category: Luxury        Tags: [pool, view, wifi, concierge]

Search the entire index for the term 'internet':

Name: Fancy Stay        Category: Luxury        Tags: [pool, view, wifi, concierge]

Search the entire index for the terms 'economy' AND 'hotel':

Name: Roach Motel       Category: Budget        Tags: [motel, budget]

První dotaz najde dokument z pravidla five star=>luxury. Druhý dotaz rozšiřuje hledání pomocí internet,wifi a třetí pomocí obou hotel, motel a economy,inexpensive=>budget při hledání dokumentů, které se shodovaly.

Přidání synonym zcela změní možnosti hledání. V tomto příkladu nedokázaly originální dotazy vrátit smysluplné výsledky, i když byly dokumenty v našem indexu relevantní. Když povolíme synonyma, můžeme rozšířit index tak, aby zahrnoval termíny, které se běžně používají, beze změn podkladových dat v indexu.

Upravte zdroje

Nejrychlejší způsob, jak vyčistit po příkladu, je odstraněním skupiny prostředků obsahující službu Azure AI Search. Skupinu prostředků teď můžete odstranit, abyste trvale odstranili všechno v ní. Na portálu se název skupiny prostředků nachází na stránce Přehled služby Azure AI Search.