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:

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

Se även