Synonymer i Azure Cognitive Search
Inom en söktjänst är synonymmappningar en global resurs som associerar motsvarande termer, vilket utökar omfånget för en fråga utan att användaren faktiskt behöver ange termen. Om vi till exempel antar att "hund", "canine" och "dog" är mappade synonymer matchar en fråga om "hund" i ett dokument som innehåller "hund".
Skapa synonymer
En synonymmappning är en tillgång som kan skapas en gång och användas av många index. Tjänstnivån avgör hur många synonymmappningar du kan skapa, från tre synonymmappningar för nivåerna Kostnadsfri och Basic, upp till 20 för Standard-nivåerna.
Du kan skapa flera synonymmappningar för olika språk, till exempel engelska och franska versioner, eller lexikoner om ditt innehåll innehåller teknisk eller dold terminologi. Du kan skapa flera synonymmappningar i söktjänsten, men ett fält kan bara använda en av dem.
En synonymmappning består av namn, format och regler som fungerar som synonymmappningsposter. Det enda format som stöds är solr , och formatet avgör solr regelkonstruktionen.
POST /synonymmaps?api-version=2020-06-30
{
"name": "geo-synonyms",
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
Washington, Wash., WA => WA\n"
}
Om du vill skapa en synonymmappning gör du det programmatiskt (portalen stöder inte synonymmappningsdefinitioner):
- Skapa synonymmappning (REST API). Den här referensen är den mest beskrivande.
- SynonymMap-klassen (.NET) och Lägg till synonymer med C#
- SynonymMap-klass (Python)
- SynonymMap-gränssnitt (JavaScript)
- SynonymMap-klass (Java)
Definiera regler
Mappningsregler följer filterspecifikationen för synonymer med öppen källkod för Apache Solr, som beskrivs i det här dokumentet: SynonymFilter. Formatet solr stöder två typer av regler:
equivalency (där villkoren är lika med ersättning i frågan)
explicita mappningar (där termer mappas till en explicit term före frågor)
Varje regel måste avgränsas med det nya radtecknet ( \n ). Du kan definiera upp till 5 000 regler per synonymmappning i en kostnadsfri tjänst och 20 000 regler per karta på andra nivåer. Varje regel kan ha upp till 20 expansioner (eller objekt i en regel). Mer information finns i Synonymgränser.
Frågeparserare gemener i versaler eller gemener, men om du vill bevara specialtecken i strängen, till exempel ett kommatecken eller bindestreck, lägger du till lämpliga escape-tecken när du skapar synonymmappningen.
Regler för likvärdighet
Regler för motsvarande termer är kommaavgränsade inom samma regel. I det första exemplet expanderar en USA fråga på till OR OR USA "United States" "United States of America" . Observera att om du vill matcha en fras måste själva frågan vara en citatteckensluten frasfråga.
I likvärdighetsfallet expanderar en dog fråga för frågan så att den även inkluderar och puppy canine .
{
"format": "solr",
"synonyms": "
USA, United States, United States of America\n
dog, puppy, canine\n
coffee, latte, cup of joe, java\n"
}
Explicit mappning
Regler för en explicit mappning betecknas med en pil => . När detta anges ersätts en termsekvens av en sökfråga som matchar vänster sida av med alternativen till höger => vid frågetiden.
I det explicita fallet skrivs en fråga för , eller om som , och frågemotorn Washington Wash. söker bara efter WA WA matchningar på termen WA . Explicit mappning gäller endast i den riktning som anges och skriver inte om frågan till WA i Washington det här fallet.
{
"format": "solr",
"synonyms": "
Washington, Wash., WA => WA\n
California, Calif., CA => CA\n"
}
Undantag för specialtecken
I fulltextsökning analyseras synonymer under frågebearbetningen precis som andra frågetermer, vilket innebär att regler för reserverade tecken och specialtecken gäller för termerna i synonymmappningen. Listan över tecken som kräver undantag varierar mellan den enkla syntaxen och den fullständiga syntaxen:
- enkel syntax
+ | " ( ) ' \ - fullständig syntax
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /
Kom ihåg att om du behöver bevara tecken som annars skulle tas bort av standardanalysen under indexeringen, bör du ersätta ett analysverktyg som bevarar dem. Några alternativ är Microsofts analysverktyg förnaturligt språk, som bevarar bindestreck eller ett anpassat analysverktyg för mer komplexa mönster. Mer information finns i Partiella termer, mönster och specialtecken.
I följande exempel visas ett exempel på hur du undviker ett tecken med ett omsnedstreck:
{
"format": "solr",
"synonyms": "WA\, USA, WA, Washington\n"
}
Eftersom omsnedstrecket i sig är ett specialtecken på andra språk som JSON och C# behöver du förmodligen dubbla escape-tecken. Till exempel skulle JSON som skickas till REST API för ovanstående synonymmappning se ut så här:
{
"format":"solr",
"synonyms": "WA\\, USA, WA, Washington"
}
Upload och hantera synonymmappningar
Som tidigare nämnts kan du skapa eller uppdatera en synonymmappning utan att störa arbetsbelastningar för frågor och indexering. En synonymmappning är ett fristående objekt (t.ex. index eller datakällor), och så länge inget fält använder det kommer uppdateringar inte att orsaka indexering eller att frågor misslyckas. Men när du lägger till en synonymmappning till en fältdefinition och sedan tar bort en synonymmappning, kommer alla frågor som innehåller fälten i fråga att misslyckas med ett 404-fel.
Att skapa, uppdatera och ta bort en synonymmappning är alltid en åtgärd för hela dokumentet, vilket innebär att du inte kan uppdatera eller ta bort delar av synonymmappningen inkrementellt. Uppdatering av även en enskild regel kräver en inläsning på nytt.
Tilldela synonymer till fält
När du har laddat upp en synonymmappning kan du aktivera synonymerna för fält av typen Edm.String eller , i fält som har Collection(Edm.String) "searchable":true . Som nämnts kan en fältdefinition bara använda en synonymmappning.
POST /indexes?api-version=2020-06-30
{
"name":"hotels-sample-index",
"fields":[
{
"name":"description",
"type":"Edm.String",
"searchable":true,
"synonymMaps":[
"en-synonyms"
]
},
{
"name":"description_fr",
"type":"Edm.String",
"searchable":true,
"analyzer":"fr.microsoft",
"synonymMaps":[
"fr-synonyms"
]
}
]
}
Fråga efter motsvarande eller mappade fält
Att lägga till synonymer medför inte nya krav på frågekonstruktion. Du kan utfärda term- och frasfrågor precis som du gjorde innan du tillade synonymer. Den enda skillnaden är att om det finns en frågeterm i synonymmappningen expanderar eller skriver frågemotorn om termen eller frasen, beroende på regeln.
Hur synonymer används vid frågekörning
Synonymer är en teknik för frågeexpansion som kompletterar innehållet i ett index med motsvarande termer, men endast för fält som har en synonymtilldelning. Om en fältomfattningsfråga exkluderar ett synonymaktiverat fält visas inte matchningar från synonymmappningen.
För synonymaktiverade fält omfattas synonymer av samma textanalys som det associerade fältet. Om ett fält till exempel analyseras med hjälp av Lucene-standardanalysen kommer synonymtermer också att omfattas av Lucene-standardanalysen vid frågetiden. Om du vill bevara skiljetecken, till exempel punkter eller bindestreck, i synonymtermen använder du ett innehållsbevarande analysverktyg på fältet.
Internt skriver synonymfunktionen om den ursprungliga frågan med synonymer med operatorn OR. Därför behandlar träffmarkerings- och bedömningsprofiler den ursprungliga termen och synonymerna som likvärdiga.
Synonymer gäller endast för textfrågor i fritt format och stöds inte för filter, fasetter, automatisk komplettering eller förslag. Automatisk komplettering och förslag baseras bara på den ursprungliga termen. synonymmatchning visas inte i svaret.
Synonymexpansion gäller inte för söktermer med jokertecken. prefix,fuzzy- och regex-termer expanderas inte.
Om du behöver göra en enskild fråga som använder synonymexpansion och jokertecken, regex eller fuzzy-sökningar kan du kombinera frågorna med hjälp av OR-syntaxen. Om du till exempel vill kombinera synonymer med jokertecken för enkel frågesyntax är termen <query> | <query>* .
Om du har ett befintligt index i en utvecklingsmiljö (icke-produktionsmiljö) kan du experimentera med en liten ordlista för att se hur tillägget av synonymer ändrar sökupplevelsen, inklusive påverkan på bedömningsprofiler, träffmarkering och förslag.