Exempel: Lägg till synonymer för Azure Kognitiv sökning i C

Med synonymer kan du utöka en fråga genom att matcha mot termer som anses betyda samma sak som den angivna söktermen. Du kanske vill att söktermen ”bil” även ska matcha dokument som innehåller termen ”fordon”.

I Azure Kognitiv sökning definieras synonymer i en synonym mappning genom mappnings regler som associerar motsvarande villkor. I det här exemplet beskrivs viktiga steg för att lägga till och använda synonymer med ett befintligt index.

I det här exemplet får du lära dig att:

Du kan fråga ett synonymt-aktiverat fält som vanligt. Det krävs ingen ytterligare frågesyntax som krävs för att komma åt synonymer.

Du kan skapa flera synonymmappningar, publicera dem som en resurs på tjänstnivå tillgänglig för alla index och sedan referera till den mappning som ska användas på fältnivå. Vid tidpunkten för frågan, förutom att söka i ett index, gör Azure Kognitiv sökning en sökning i en synonym karta, om ett sådant anges i fält som används i frågan.

Anteckning

Synonymer kan skapas program mässigt, men inte i portalen.

Förutsättningar

I den här självstudien behöver du följande:

Om du inte är bekant med .NET-klient biblioteket kan du läsa om hur du använder Azure kognitiv sökning i .net.

Exempelkod

Du hittar den fullständiga käll koden för exempel programmet som används i det här exemplet på GitHub.

Översikt

Innan-och-efter-frågor används för att visa värdet för synonymer. I det här exemplet kör ett exempel program frågor och returnerar resultat på ett exempel på "Hotels"-index som är ifyllt med två dokument. Först kör programmet Sök frågor med hjälp av termer och fraser som inte visas i indexet. För det andra aktiverar koden synonym funktionen och sedan återskapar samma frågor, den här tiden returnerar resultat baserat på matchningar i synonym kartan.

I koden nedan kan du se flödet som en helhet.

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();
}

”Före”-frågor

Kör sökningar med termerna ”five star”, ”internet” och ”economy AND hotel” i RunQueriesWithNonExistentTermsInIndex.

Fras frågor, till exempel "fem stjärnor", måste omges av citat tecken, och kan också behöva escape-tecken beroende på din klient.

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);

Inget av de två indexerade dokumenten innehåller villkoren, så vi får följande utdata från det första RunQueriesWithNonExistentTermsInIndex : inget dokument matchade.

Aktivera synonymer

Efter att frågorna har körts, aktiverar exempel koden synonymer. Att aktivera synonymer är en tvåstegsprocess. Börja med att definiera och överföra synonym regler. Sedan konfigurerar du fälten genom att använda dem. Processen beskrivs i UploadSynonyms och EnableSynonymsInHotelsIndex.

  1. Lägg till en synonymmappning i söktjänsten. I UploadSynonyms definierar vi fyra regler i synonymmappningen desc-synonymmap och laddar upp mappningen till tjänsten.

    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. Konfigurera sökbara fält så att synonymmappningen används i indexdefinitionen. I AddSynonymMapsToFields aktiverar vi synonymer för de två fälten category och tags genom att ange namnet på synonymmappningen för egenskapen SynonymMapNames.

    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;
    }
    

    När du lägger till en synonymmappning behöver du inte skapa indexet på nytt. Du kan lägga till en synonymmappning för tjänsten och sedan göra tillägg till befintliga fältdefinitioner i dina index så att den nya synonymmappningen används. Indexet tillgänglighet påverkas inte om du lägger till nya attribut. Samma sak gäller om du inaktiverar synonymer för ett fält. Du kan helt enkelt ange en tom lista för egenskapen SynonymMapNames.

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

”Efter”-frågor

När synonymmappningen har laddats upp och indexet har uppdaterats så att mappningen används ger det andra anropet av RunQueriesWithNonExistentTermsInIndex följande resultat:

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]

Den första frågan hittar dokument via regeln five star=>luxury. Den andra frågan utökar sökningen med internet,wifi och den tredje med både hotel, motel och economy,inexpensive=>budget, och därför hittas de matchande dokumenten.

Du får en helt ny sökupplevelse när du lägger till synonymer. I det här exemplet kunde inte de ursprungliga frågorna returnera meningsfulla resultat trots att dokumenten i vårt index var relevanta. Genom att aktivera synonymer kan vi expandera ett index med termer som används ofta utan att behöva ändra underliggande data i indexet.

Rensa resurser

Det snabbaste sättet att rensa efter ett exempel är genom att ta bort resurs gruppen som innehåller Azure Kognitiv sökning-tjänsten. Du kan ta bort resursgruppen nu så att allt innehåll i den tas bort permanent. I portalen finns resurs gruppens namn på sidan Översikt i Azure Kognitiv sökning-tjänsten.

Nästa steg

I det här exemplet demonstreras funktionen synonymer i C#-kod för att skapa och publicera mappnings regler och sedan anropa synonym kartan på en fråga. Mer information finns i referensdokumentationen för .NET SDK och REST-API:t.