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:
Notitie
Zie naslaginformatie over de syntaxis van de OData-expressie voor Azure AI Search voor het volledige EBNF.
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