OData-$orderby syntax i Azure AI Search
I Azure AI Search anger parametern $orderby en anpassad sorteringsordning för sökresultat. Den här artikeln beskriver OData-syntaxen för $orderby och innehåller exempel.
Konstruktion och konstanter för fältvägar beskrivs i översikten över OData-språket i Azure AI Search. Mer information om sorteringsbeteenden finns i Sortera resultat.
Syntax
Parametern $orderby accepterar en kommaavgränsad lista med upp till 32 order-by-satser. Syntaxen för en order-by-sats beskrivs av följande EBNF (Extended Backus-Naur Form):
order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?
sortable_function ::= geo_distance_call | 'search.score()'
Ett interaktivt syntaxdiagram är också tillgängligt:
Kommentar
Se syntaxreferens för OData-uttryck för Azure AI Search för hela EBNF.
Varje sats har sorteringsvillkor, eventuellt följt av en sorteringsriktning (asc
för stigande eller desc
fallande). Om du inte anger någon riktning är standardvärdet stigande. Om det finns null-värden i fältet visas nullvärden först om sorteringen är asc
och sist om sorteringen är desc
.
Sorteringsvillkoren kan antingen vara sökvägen till ett sortable
fält eller ett anrop till antingen geo.distance
funktionerna eller search.score
.
För strängfält används ascii-standardsorteringsordningen och unicode-standardsorteringsordningen. Som standard är sortering skiftlägeskänsligt, men du kan använda en normaliserare för att förbearbeta texten innan du sorterar för att ändra det här beteendet. Du kan också använda en asciifolding
normaliserare för att konvertera icke-ASCII-tecken till deras ASCII-motsvarighet, om det finns en sådan.
Om flera dokument har samma sorteringsvillkor och search.score
funktionen inte används (till exempel om du sorterar efter ett numeriskt Rating
fält och tre dokument alla har betyget 4), bryts banden efter dokumentpoäng i fallande ordning. När dokumentpoängen är desamma (till exempel när det inte finns någon fulltextsökningsfråga angiven i begäran) är den relativa ordningen på de kopplade dokumenten obestämd.
Du kan ange flera sorteringsvillkor. Uttrycksordningen avgör den slutliga sorteringsordningen. Om du till exempel vill sortera fallande efter poäng, följt av Omdöme, skulle syntaxen vara $orderby=search.score() desc,Rating desc
.
Syntaxen för geo.distance
i $orderby är densamma som i $filter. När du använder i $orderby måste fältet som det gäller vara av typen Edm.GeographyPoint
och det måste också vara sortable
.geo.distance
Syntaxen för search.score
i $orderby är search.score()
. Funktionen search.score
tar inga parametrar.
Exempel
Sortera hotell stigande efter baspris:
$orderby=BaseRate asc
Sortera hotell som fallande efter klassificering och sedan stigande efter baspris (kom ihåg att stigande är standardvärdet):
$orderby=Rating desc,BaseRate
Sortera hotell fallande efter klassificering och sedan stigande efter avstånd från de angivna koordinaterna:
$orderby=Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc
Sortera hotell i fallande ordning efter search.score och omdöme och sedan i stigande ordning efter avstånd från de angivna koordinaterna. Mellan två hotell med identiska relevanspoäng och betyg visas den närmaste först:
$orderby=search.score() desc,Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc