Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Facetnavigatie wordt gebruikt voor zelfgestuurd filteren op queryresultaten in een zoek-app, waarbij uw toepassing formulierbesturingselementen biedt voor het verkennen van zoekacties naar groepen documenten (bijvoorbeeld categorieën of merken) en Azure AI Search biedt de gegevensstructuren en filters om de ervaring te herstellen.
In dit artikel leert u de stappen voor het retourneren van een facetnavigatiestructuur in Azure AI Search. Zodra u bekend bent met basisconcepten en klanten, kunt u doorgaan met Facet-voorbeelden voor syntaxis van verschillende gebruikstoepassingen, waaronder eenvoudige facetten en afzonderlijke aantallen.
Er zijn meer facetmogelijkheden beschikbaar via preview-API's:
- hiërarchische facetstructuren
- facettenfiltering
- facetaggregaties
Voorbeelden van facetnavigatie bieden de syntaxis en het gebruik voor de preview-functies.
Facetnavigatie op een zoekpagina
Facetten zijn dynamisch omdat ze zijn gebaseerd op elke specifieke resultaatset van query's. Een zoekrespons bevat alle facetcategorieën die worden gebruikt om door de documenten in het resultaat te navigeren. De query wordt eerst uitgevoerd en vervolgens worden facetten opgehaald uit de huidige resultaten en samengevoegd in een facetnavigatiestructuur.
In Azure AI Search zijn facetten één laag diep en kunnen ze niet hiërarchisch zijn, tenzij u de preview-API gebruikt. Als u niet bekend bent met facetnavigatiestructuren, ziet u in het volgende voorbeeld aan de linkerkant een structuur. Aantallen geven het aantal overeenkomsten voor elk facet aan. Hetzelfde document kan in meerdere facetten worden weergegeven.
Facetten kunnen u helpen te vinden wat u zoekt, terwijl u ervoor zorgt dat u geen nul resultaten krijgt. Als ontwikkelaar kunt u met facetten de nuttigste zoekcriteria weergeven voor het navigeren in uw zoekindex.
Facetnavigatie in code
Facetten worden ingeschakeld voor ondersteunde velden in een index en vervolgens opgegeven voor een query. De facetnavigatiestructuur wordt aan het begin van het antwoord gepresenteerd, gevolgd door de resultaten.
Het volgende REST-voorbeeld is een lege query ("search": "*"
) die is gericht op de volledige index (zie het voorbeeld van de ingebouwde hotels). Met facets
de parameter wordt het veld Categorie opgegeven.
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
}
Het antwoord voor het voorbeeld begint met de facetnavigatiestructuur. De structuur bestaat uit 'Categorie'-waarden en een telling van de hotels voor elk hotel. Het wordt gevolgd door de rest van de zoekresultaten, hier ingekort tot slechts één document voor beknoptheid. Dit voorbeeld werkt om verschillende redenen goed. Het aantal facetten voor dit veld valt onder de limiet (standaard is 10), zodat ze allemaal worden weergegeven en elk hotel in de index van 50 hotels wordt weergegeven in precies een van deze categorieën.
{
"@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,
},
. . .
]
}
Facetten voor velden inschakelen
U kunt facetten toevoegen aan nieuwe velden die tekst zonder opmaak of numerieke inhoud bevatten. Ondersteunde gegevenstypen zijn tekenreeksen, datums, booleaanse velden en numerieke velden (maar geen vectoren).
U kunt de Azure-portal, REST API's, Azure SDK's of elke methode gebruiken die ondersteuning biedt voor het maken of bijwerken van indexschema's in Azure AI Search. Als eerste stap identificeert u welke velden moeten worden gebruikt voor facet.
Kiezen welke velden u wilt toewijzen
Facetten kunnen worden berekend over velden en verzamelingen met één waarde. Velden die het beste werken in facetnavigatie hebben deze kenmerken:
- Menselijk leesbare inhoud (niet-vector).
- Lage kardinaliteit (enkele afzonderlijke waarden die worden herhaald in documenten in uw zoektekst).
- Korte beschrijvende waarden (een of twee woorden) die mooi worden weergegeven in een navigatiestructuur.
De waarden in een veld en niet de veldnaam zelf produceren de facetten in een facetnavigatiestructuur. Als het facet een tekenreeksveld met de naam Kleur is, zijn facetten blauw, groen en andere waarden voor dat veld. Controleer de veldwaarden om ervoor te zorgen dat er geen typefouten, null-waarden of hoofdletterverschillen zijn. Overweeg om een normalizer toe te wijzen aan een filterbaar en facetabel veld om kleine variaties in de tekst glad te maken. 'Canada', 'CANADA' en 'canada' worden bijvoorbeeld allemaal genormaliseerd naar één enkele emmer.
Vermijd niet-ondersteunde velden
U kunt geen facetten instellen voor bestaande velden, vectorvelden of velden van het type Edm.GeographyPoint
of Collection(Edm.GeographyPoint)
.
In complexe veldverzamelingen moet 'facetable' nul zijn.
Beginnen met nieuwe velddefinities
Kenmerken die van invloed zijn op de wijze waarop een veld wordt geïndexeerd, kunnen alleen worden ingesteld wanneer velden worden gemaakt. Deze beperking geldt voor facetten en filters.
Als uw index al bestaat, kunt u een nieuwe velddefinitie toevoegen die facetten biedt. Bestaande documenten in de index krijgen een null-waarde voor het nieuwe veld. Deze null-waarde wordt vervangen wanneer u de index de volgende keer vernieuwt.
Ga op de pagina zoekservices van Azure Portal naar het tabblad Velden van de index en selecteer Veld toevoegen.
Geef een naam, gegevenstype en kenmerken op. We raden aan om 'filterbaar' toe te voegen, omdat het gebruikelijk is om filters in te stellen op basis van een facet bucket in de reactie. We raden u aan te sorteren omdat filters ongeorderdende resultaten produceren en u deze in uw toepassing wilt sorteren.
U kunt ook doorzoekbaar instellen als u ook zoeken in volledige tekst in het veld wilt ondersteunen en ophalen als u het veld in het zoekantwoord wilt opnemen.
Sla de velddefinitie op.
Facetten in een query retourneren
Zoals u weet, worden facetten dynamisch berekend op basis van resultaten in een queryantwoord. U ontvangt alleen facetten voor documenten die door de huidige query zijn gevonden.
Gebruik de JSON-weergave in Search Explorer om facetparameters in te stellen in Azure Portal.
- Selecteer een index en open Search Explorer in de JSON-weergave.
- Geef een query op in JSON. U kunt deze typen, de JSON kopiëren uit een REST-voorbeeld of intellisense gebruiken om te helpen met syntaxis. Raadpleeg het REST-voorbeeld op het volgende tabblad voor naslaginformatie over facetexpressies.
- Selecteer Zoeken om facetresultaten te retourneren, geformuleerd in JSON.
Hier volgt een schermopname van het voorbeeld van een eenvoudige facetquery in de voorbeeldindex van hotels. U kunt in andere voorbeelden in dit artikel plakken om de resultaten in Search Explorer te retourneren.
Aanbevolen procedures voor het werken met facetten
Deze sectie is een verzameling tips en tijdelijke oplossingen die nuttig zijn voor het ontwikkelen van toepassingen.
Wij raden aan de C#: Zoekfunctie toe te voegen aan web-apps als een voorbeeld van facetnavigatie, inclusief code voor de presentatielaag. Het voorbeeld bevat ook filters, suggesties en automatisch aanvullen. Het maakt gebruik van JavaScript en React voor de presentatielaag.
Een facetnavigatiestructuur initialiseren met een niet-gekwalificeerde of lege zoekreeks
Het is handig om een zoekpagina te initialiseren met een open query ("search": "*"
) om de facetnavigatiestructuur volledig in te vullen. Zodra u querytermen in de aanvraag doorgeeft, is de facetnavigatiestructuur beperkt tot alleen de overeenkomsten in de resultaten, in plaats van de volledige index. Deze procedure is handig voor het verifiëren van facet- en filtergedrag tijdens het testen. Als u overeenkomende criteria in de query opneemt, worden in het antwoord documenten uitgesloten die niet overeenkomen, wat het potentiële downstreameffect heeft van het uitsluiten van facetten.
Duidelijke facetten
Wanneer u de gebruikerservaring ontwerpt, moet u een mechanisme toevoegen voor het wissen van facetten. Een algemene benadering voor het wissen van facetten is het uitvoeren van een open zoekopdracht om de pagina te resetten.
Faceting uitschakelen om opslagruimte te besparen en de prestaties te verbeteren
Voor prestatie- en opslagoptimalisatie, stel "facetable": false
voor velden die nooit als facet mogen worden gebruikt. Voorbeelden zijn tekenreeksvelden voor unieke waarden, zoals een ID of productnaam, om te voorkomen dat ze onbedoeld (en ineffectief) worden gebruikt in de facetnavigatie. Deze best practice is met name belangrijk voor de REST API, waarmee filters en facetten op tekenreeksvelden standaard worden ingeschakeld.
Houd er rekening mee dat u de velden Edm.GeographyPoint
of Collection(Edm.GeographyPoint)
niet kunt gebruiken in de facetnavigatie. Zoals u weet, werken facetten het beste voor velden met een lage kardinaliteit. Vanwege de manier waarop geocoördinaten worden opgelost, is het zeldzaam dat twee sets coördinaten gelijk zijn binnen een dataset. Daarom worden facetten niet ondersteund voor geocoördinaten. U moet een plaats- of regioveld gebruiken om op locatie te filteren.
Controleren op slechte gegevens
Wanneer u gegevens voorbereidt voor indexering, controleert u velden op null-waarden, spelfouten of hoofdletterverschillen en één en meervoudsversies van hetzelfde woord. Filters en facetten ondergaan standaard geen lexicale analyse of spellingcontrole, wat betekent dat alle waarden van een 'facetable'-veld potentiële facetten zijn, zelfs als de woorden met één teken verschillen.
Normalizers kunnen gegevensverschillen beperken, corrigeren voor hoofdletters en tekenverschillen. Als u uw gegevens wilt inspecteren, kunt u velden in de bron controleren of query's uitvoeren die waarden retourneren uit de index.
Een index is niet de beste plaats om null-waarden of ongeldige waarden op te lossen. U moet gegevensproblemen in uw bron oplossen, ervan uitgaande dat het een database of permanente opslag is, of in een stap voor het opschonen van gegevens die u uitvoert voordat u indexeert.
Facet buckets bestellen
Hoewel u binnen een bucket kunt sorteren, zijn er geen parameters voor het beheren van de volgorde van facetbuckets in de navigatiestructuur als geheel. Als u facet buckets in een specifieke volgorde wilt, moet u deze opgeven in de toepassingscode.
Verschillen in facetaantallen
Onder bepaalde omstandigheden is het mogelijk dat facetaantallen niet volledig nauwkeurig zijn vanwege de sharding-architectuur. Elke zoekindex wordt verspreid over meerdere shards en elke shard rapporteert de belangrijkste N facetten op basis van het aantal documenten, die vervolgens worden gecombineerd tot één resultaat. Omdat het alleen de belangrijkste N facetten voor elke shard zijn, is het mogelijk om overeenkomende documenten in het facettenresultaat te missen of te weinig te tellen.
Om nauwkeurigheid te garanderen, kunt u het aantal:<getallen> kunstmatig verhogen naar een groot getal om volledige rapportage van elke shard af te dwingen. U kunt opgeven "count": "0"
voor onbeperkte facetten. U kunt ook 'count' instellen op een waarde die groter is dan of gelijk is aan het aantal unieke waarden van het facetveld. Als u bijvoorbeeld een facet maakt met een veld 'grootte' met vijf unieke waarden, kunt u "count:5"
instellen om ervoor te zorgen dat alle overeenkomsten in de facetrespons worden weergegeven.
De afweging met deze tijdelijke oplossing is een hogere querylatentie, dus gebruik deze alleen wanneer dat nodig is.
Een facetnavigatiestructuur asynchroon van gefilterde resultaten behouden
In Azure AI Search bestaan facetten alleen voor huidige resultaten. Het is echter een algemene toepassingsvereiste om een statische set facetten te behouden, zodat de gebruiker in omgekeerde richting kan navigeren en de stappen kan terugtrekken om alternatieve paden te verkennen via zoekinhoud.
Als u een statische set facetten naast een dynamische drilldown-ervaring wilt, kunt u dit implementeren door twee gefilterde query's te gebruiken: een die is gericht op de resultaten en een andere die wordt gebruikt om een statische lijst met facetten te maken voor navigatiedoeleinden.
Compenseer grote facetaantallen met behulp van filters
Zoekresultaten en facetresultaten die te groot zijn, kunnen worden bijgesneden door filters toe te voegen. In het volgende voorbeeld hebben 254 items in de query voor cloud-computinginterne specificatie als inhoudstype. Als de resultaten te groot zijn, kan het toevoegen van filters uw gebruikers helpen de query te verfijnen door meer criteria toe te voegen.
Items sluiten elkaar niet uit. Als een item voldoet aan de criteria van beide filters, wordt het in elk item meegeteld. Deze duplicatie is mogelijk bij faceting van Collection(Edm.String)
velden, die vaak worden gebruikt voor het implementeren van documenttags.
Search term: "cloud computing"
Content type
Internal specification (254)
Video (10)