Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Fasetterad navigering används för självstyrd filtrering av frågeresultat i en sökapp, där ditt program erbjuder formulärkontroller för omfångssökning till grupper av dokument (till exempel kategorier eller varumärken), och Azure AI Search tillhandahåller datastrukturer och filter för att stödja upplevelsen.
I den här artikeln lär du dig hur du returnerar en fasetterad navigeringsstruktur i Azure AI Search. När du är bekant med grundläggande begrepp och klienter fortsätter du till Fasetteringsexempel för syntax om olika användningsfall, inklusive grundläggande fasettering och distinkta antal.
Fler fasetteringsfunktioner är tillgängliga via förhandsversions-API:er:
- hierarkiska fasetter
- fasetteringsfiltrering
- aggregeringar av fasetter
Exempel på facettnavigation ger syntaxen och användningen för förhandsgranskningsfunktionerna.
Fasetterad navigering på en söksida
Fasetter är dynamiska eftersom de baseras på varje specifik frågeresultatuppsättning. Ett söksvar innehåller alla fasettgrupper som används för att navigera i dokumenten i resultatet. Frågan körs först och sedan hämtas fasetter från de aktuella resultaten och monteras till en fasetterad navigeringsstruktur.
I Azure AI Search är fasetter ett lager djupt och kan inte vara hierarkiska om du inte använder förhandsversions-API:et. Om du inte är bekant med fasetterade navigeringsstrukturer, visar följande exempel en till vänster. Antal anger antalet matchningar för varje aspekt. Samma dokument kan representeras i flera fasetter.
Fasetter kan hjälpa dig att hitta det du letar efter, samtidigt som du ser till att du inte får noll resultat. Som utvecklare kan du med fasetter exponera de mest användbara sökkriterierna för att navigera i ditt sökindex.
Avancerad navigering i programkoden
Fasetter aktiveras i fält som stöds i ett index och anges sedan i en fråga. Den fasetterade navigeringsstrukturen returneras i början av svaret, följt av resultaten.
Följande REST-exempel är en tom fråga ("search": "*"
) som är begränsad till hela indexet (se det inbyggda hotellexemplet). Parametern facets
anger fältet "Kategori".
POST https://{{service_name}}.search.windows.net/indexes/hotels/docs/search?api-version={{api_version}}
{
"search": "*",
"queryType": "simple",
"select": "",
"searchFields": "",
"filter": "",
"facets": [ "Category"],
"orderby": "",
"count": true
}
Svaret för exemplet börjar med den fasetterade navigeringsstrukturen. Strukturen består av "Kategori"-värden och antalet hotell för var och en. Det följs av resten av sökresultaten, som trimmas här till bara ett dokument för korthet. Det här exemplet fungerar bra av flera orsaker. Antalet fasetter för det här fältet ligger under gränsen (standardvärdet är 10) så alla visas, och varje hotell i indexet för 50 hotell representeras i exakt en av dessa kategorier.
{
"@odata.context": "https://demo-search-svc.search.windows.net/indexes('hotels')/$metadata#docs(*)",
"@odata.count": 50,
"@search.facets": {
"Category": [
{
"count": 13,
"value": "Budget"
},
{
"count": 12,
"value": "Resort and Spa"
},
{
"count": 9,
"value": "Luxury"
},
{
"count": 7,
"value": "Boutique"
},
{
"count": 5,
"value": "Suite"
},
{
"count": 4,
"value": "Extended-Stay"
}
]
},
"value": [
{
"@search.score": 1.0,
"HotelId": "1",
"HotelName": "Stay-Kay City Hotel",
"Description": "The hotel is ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Time's Square and the historic centre of the city, as well as other places of interest that make New York one of America's most attractive and cosmopolitan cities.",
"Category": "Boutique",
"Tags": [
"pool",
"air conditioning",
"concierge"
],
"ParkingIncluded": false,
},
. . .
]
}
Aktivera fasetter i fält
Du kan lägga till fasetter i nya fält som innehåller oformaterad text eller numeriskt innehåll. Datatyper som stöds är strängar, datum, booleska fält och numeriska fält (men inte vektorer).
Du kan använda Azure-portalen, REST-API:er, Azure SDK:er eller någon metod som stöder skapande eller uppdatering av indexscheman i Azure AI Search. Som ett första steg identifierar du vilka fält som ska användas för fasettering.
Välj vilka fält som ska tillskrivas
Fasetter kan beräknas över fält och samlingar med ett enda värde. Fält som fungerar bäst i fasetterad navigering har följande egenskaper:
- Mänskligt läsbart (icke-vektor) innehåll.
- Låg kardinalitet (några distinkta värden som upprepas i dokument i sök corpus).
- Korta beskrivande värden (ett eller två ord) som återges snyggt i ett navigeringsträd.
Värdena i ett fält, och inte själva fältnamnet, skapar fasetter i en fasetterad navigeringsstruktur. Om aspekten är ett strängfält med namnet Färg är fasetter blå, gröna och andra värden för det fältet. Granska fältvärdena för att se till att det inte finns några stavfel, nollvärden eller skillnader i textens formatering. Överväg att tilldela en normaliserare till ett filterbart och fasettbart fält för att jämna ut mindre variationer i texten. Till exempel skulle "Kanada", "KANADA" och "kanada" normaliseras till en kategori.
Undvik fält som inte stöds
Du kan inte ange fasetter för befintliga fält, på vektorfält eller fält av typen Edm.GeographyPoint
eller Collection(Edm.GeographyPoint)
.
I komplexa fältsamlingar måste "facetable" vara null.
Börja med nya fältdefinitioner
Attribut som påverkar hur ett fält indexeras kan bara anges när fält skapas. Den här begränsningen gäller fasetter och filter.
Om ditt index redan finns kan du lägga till en ny fältdefinition som innehåller fasetter. Befintliga dokument i indexet får ett null-värde för det nya fältet. Det här null-värdet ersätts nästa gång du uppdaterar indexet.
På sidan söktjänster i Azure-portalen går du till fliken Fält i indexet och väljer Lägg till fält.
Ange namn, datatyp och attribut. Vi rekommenderar att du lägger till filterbar eftersom det är vanligt att ange filter baserat på en fasettbucket i svaret. Vi rekommenderar sortering eftersom filter ger osorterade resultat och du kanske vill sortera dem i ditt program.
Du kan också ange sökbar om du också vill ha stöd för fulltextsökning i fältet och kan hämtas om du vill inkludera fältet i söksvaret.
Spara fältdefinitionen.
Returnera fasetter i en sökfråga
Kom ihåg att fasetter beräknas dynamiskt utifrån resultat i ett frågesvar. Du får bara fasetter för dokument som hittas av den aktuella sökfrågan.
Använd JSON-vyn i Search Explorer för att ange fasetteringsparametrar i Azure-portalen.
- Välj ett index och öppna Sökutforskaren i JSON-vyn.
- Ange en fråga i JSON. Du kan skriva ut det, kopiera JSON från ett REST-exempel eller använda intellisense för att hjälpa till med syntax. För referens om fasettuttryck, se REST-exemplet på nästa flik.
- Välj Sök för att returnera fasetterade resultat, formulerade i JSON.
Här är en skärmbild av exempel på grundläggande aspektfråga i hotellexempelindexet. Du kan klistra in andra exempel i den här artikeln för att returnera resultaten i Sökutforskaren.
Metodtips för att arbeta med fasetter
Det här avsnittet är en samling tips och lösningar som är användbara för programutveckling.
Vi rekommenderar C#: Lägg till sökning i webbappar för ett exempel på fasetterad navigering som innehåller kod för presentationsskiktet. Exemplet innehåller även filter, förslag och automatisk komplettering. Den använder JavaScript och React för presentationsskiktet.
Initiera en fasetterad navigeringsstruktur med en okvalificerad eller tom söksträng
Det är användbart att initiera en söksida med en öppen fråga ("search": "*"
) för att helt fylla i den fasetterade navigeringsstrukturen. Så snart du skickar frågetermer i begäran begränsas den fasetterade navigeringsstrukturen till bara matchningarna i resultatet i stället för hela indexet. Den här metoden är användbar för att verifiera fasetterings- och filterbeteenden under testningen. Om du inkluderar matchningsvillkor i frågan exkluderar svaret dokument som inte matchar, vilket har den potentiella nedströmseffekten att exkludera fasetter.
Rensa fasetter
När du utformar användarupplevelsen bör du komma ihåg att lägga till en mekanism för att rensa fasetter. En vanlig metod för att rensa fasetter är att utfärda en öppen fråga för att återställa sidan.
Inaktivera fasettering för att spara på lagring och förbättra prestanda
För prestanda- och lagringsoptimering anger du "facetable": false
för fält som aldrig ska användas som en aspekt. Exempel är strängfält för unika värden, till exempel ett ID eller produktnamn, för att förhindra deras oavsiktliga och ineffektiva användning i fasetterad navigering. Den här bästa metoden är särskilt viktig för REST-API:et, som aktiverar filter och fasetter i strängfält som standard.
Kom ihåg att du inte kan använda Edm.GeographyPoint
eller Collection(Edm.GeographyPoint)
fält i fasetterad navigering. Kom ihåg att fasetter fungerar bäst på fält med låg kardinalitet. På grund av hur geokoordinater löser sig är det ovanligt att två uppsättningar koordinater är lika i en viss datamängd. Därför stöds inte fasetter för geo-koordinater. Du bör använda ett fält för stad eller region för att dela upp efter plats.
Sök efter felaktiga data
När du förbereder data för indexering kontrollerar du fälten efter nullvärden, felstavningar eller skiftlägesavvikelser samt enskilda versioner och pluralversioner av samma ord. Som standard genomgår filter och fasetter inte lexikal analys eller stavningskontroll, vilket innebär att alla värden i ett "facetable"-fält är potentiella fasetter, även om orden skiljer sig åt med ett tecken.
Normaliserare kan minimera dataavvikelser, korrigera för hölje- och teckenskillnader. Annars kan du kontrollera dina data genom att kontrollera fälten vid källan eller köra frågor som returnerar värden från indexet.
Ett index är inte det bästa stället för att åtgärda nullvärden eller ogiltiga värden. Du bör åtgärda dataproblem i källan, förutsatt att det är en databas eller beständig lagring, eller i ett datarensningssteg som du utför före indexeringen.
Beställa fasetteringshink
Även om du kan sortera i en bucket finns det inga parametrar för att styra ordningen på fasetter i navigeringsstrukturen som helhet. Om du vill ha fasetter i en viss ordning måste du ange den i programkoden.
Avvikelser i antal fasetter
Under vissa omständigheter kan det hända att antalet fasetter inte är helt korrekta på grund av arkitekturen för horisontell partitionering. Varje sökindex sprids över flera shards, och varje shard rapporterar de översta N fasetter efter antal dokument, som sedan kombineras till ett enda resultat. Eftersom det bara är de översta N fasetter för varje shard, är det möjligt att missa eller underberäkning matchande dokument i fasetteringssvaret.
För att garantera noggrannheten kan du artificiellt blåsa upp antalet:<tal> till ett stort tal för att tvinga fram fullständig rapportering från varje shard. Du kan ange "count": "0"
för obegränsade fasetter. Eller så kan du ange "count" till ett värde som är större än eller lika med antalet unika värden i det fasetterade fältet. Om du till exempel fasetterar med ett "storleksfält" som har fem unika värden kan du ange "count:5"
så att alla matchningar representeras i fasetteringssvaret.
Kompromissen med den här lösningen är ökad frågesvarstid, så använd den bara när det behövs.
Bevara en fasetterad navigeringsstruktur asynkront för filtrerade resultat
I Azure AI Search finns fasetter endast för aktuella resultat. Det är dock ett vanligt programkrav att behålla en statisk uppsättning fasetter så att användaren kan navigera i omvända, retracing-steg för att utforska alternativa sökvägar via sökinnehåll.
Om du vill ha en statisk uppsättning fasetter tillsammans med en dynamisk detaljvisning kan du implementera den med hjälp av två filtrerade frågor: en som är begränsad till resultaten, den andra används för att skapa en statisk lista med fasetter i navigeringssyfte.
Justera stora fasettantal genom filter
Sökresultat och fasetteringsresultat som är för stora kan trimmas genom att lägga till filter. I följande exempel har 254 objekt intern specifikation som innehållstyp i frågan för molnbaserad databehandling. Om resultaten är för stora kan du förbättra frågan genom att lägga till fler villkor genom att lägga till filter.
Objekt utesluter inte varandra. Om ett objekt uppfyller kriterierna för båda filtren räknas det i var och en. Den här dupliceringen är möjlig när du fasetterar fält Collection(Edm.String)
, som ofta används för att implementera dokumenttaggning.
Search term: "cloud computing"
Content type
Internal specification (254)
Video (10)