OData $orderby syntaxis in Azure AI Search

In Azure AI Search geeft de $orderby parameter een aangepaste sorteervolgorde voor zoekresultaten op. In dit artikel worden de OData-syntaxis van $orderby beschreven en vindt u voorbeelden.

Bouw van veldpaden en constanten worden beschreven in het overzicht van de OData-taal in Azure AI Search. Zie Resultaten ordenen voor meer informatie over sorteergedrag.

Syntaxis

De parameter $orderby accepteert een door komma's gescheiden lijst met maximaal 32 order-by-componenten. De syntaxis van een order-by-component wordt beschreven door het volgende EBNF (Extended Backus-Naur Form):

order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?

sortable_function ::= geo_distance_call | 'search.score()'

Er is ook een interactief syntaxisdiagram beschikbaar:

Elke component heeft sorteercriteria, eventueel gevolgd door een sorteerrichting (asc voor oplopend of desc aflopend). Als u geen richting opgeeft, wordt de standaardwaarde oplopend. Als er null-waarden in het veld zijn, worden null-waarden eerst weergegeven als de sortering is asc en als laatste als de sortering is desc.

De sorteercriteria kunnen het pad van een sortable veld zijn of een aanroep naar de geo.distance of de search.score functies.

Voor tekenreeksvelden wordt de standaard-ASCII-sorteervolgorde en standaard unicode-sorteervolgorde gebruikt. Sorteren is standaard hoofdlettergevoelig, maar u kunt een normalizer gebruiken om de tekst vooraf te verwerken voordat u sorteert om dit gedrag te wijzigen. U kunt ook een asciifolding normalizer gebruiken om niet-ASCII-tekens te converteren naar hun ASCII-equivalent, indien aanwezig.

Als meerdere documenten dezelfde sorteercriteria hebben en de search.score functie niet wordt gebruikt (als u bijvoorbeeld sorteert op een numeriek Rating veld en drie documenten allemaal een classificatie van 4 hebben), worden de banden verbroken op documentscore in aflopende volgorde. Wanneer documentscores hetzelfde zijn (bijvoorbeeld wanneer er geen zoekquery voor volledige tekst is opgegeven in de aanvraag), is de relatieve volgorde van de gekoppelde documenten onbepaald.

U kunt meerdere sorteercriteria opgeven. De volgorde van expressies bepaalt de uiteindelijke sorteervolgorde. Als u bijvoorbeeld aflopend wilt sorteren op score, gevolgd door Waardering, zou de syntaxis zijn $orderby=search.score() desc,Rating desc.

De syntaxis voor geo.distance in $orderby is hetzelfde als in $filter. geo.distance Wanneer u in $orderby gebruikt, moet het veld waarop het van toepassing is van het type Edm.GeographyPoint zijn en moet het ook zijnsortable.

De syntaxis voor search.score in $orderby is search.score(). De functie search.score heeft geen parameters.

Voorbeelden

Sorteer hotels oplopend op basistarief:

    $orderby=BaseRate asc

Sorteer hotels aflopend op classificatie en vervolgens oplopend op basistarief (houd er rekening mee dat oplopend de standaardwaarde is):

    $orderby=Rating desc,BaseRate

Sorteer hotels aflopend op classificatie en vervolgens oplopend op afstand van de opgegeven coördinaten:

    $orderby=Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc

Sorteer hotels in aflopende volgorde op search.score en classificatie en vervolgens in oplopende volgorde op afstand van de opgegeven coördinaten. Tussen twee hotels met identieke relevantiescores en beoordelingen wordt de dichtstbijzijnde als eerste weergegeven:

    $orderby=search.score() desc,Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc

Zie ook