Sintassi di $orderby OData in Azure AI Search
In Ricerca di intelligenza artificiale di Azure il parametro $orderby specifica un ordinamento personalizzato per i risultati della ricerca. Questo articolo descrive la sintassi OData di $orderby e fornisce esempi.
La costruzione e le costanti dei percorsi di campo sono descritte nella panoramica del linguaggio OData in Ricerca di intelligenza artificiale di Azure. Per altre informazioni sui comportamenti di ordinamento, vedere Ordinamento dei risultati.
Sintassi
Il parametro $orderby accetta un elenco delimitato da virgole di un massimo di 32 clausole order-by. La sintassi di una clausola order-by è descritta dal seguente EBNF (Extended Backus-Naur Form):
order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?
sortable_function ::= geo_distance_call | 'search.score()'
È disponibile anche un diagramma di sintassi interattivo:
Nota
Vedere Informazioni di riferimento sulla sintassi delle espressioni OData per Azure AI Search per l'EBNF completo.
Ogni clausola dispone di criteri di ordinamento, seguiti facoltativamente da una direzione di ordinamento (asc
per crescente o desc
decrescente). Se non si specifica una direzione, il valore predefinito è crescente. Se nel campo sono presenti valori Null, i valori Null vengono visualizzati per primi se l'ordinamento è asc
e infine se l'ordinamento è desc
.
I criteri di ordinamento possono essere il percorso di un sortable
campo o una chiamata alle geo.distance
funzioni o search.score
.
Per i campi stringa, verranno usati l'ordinamento ASCII predefinito e l'ordinamento Unicode predefinito. Per impostazione predefinita, l'ordinamento fa distinzione tra maiuscole e minuscole, ma è possibile usare un normalizzatore per pre-elaborare il testo prima dell'ordinamento per modificare questo comportamento. È anche possibile usare un asciifolding
normalizzatore per convertire caratteri non ASCII nell'equivalente ASCII, se presente.
Se più documenti hanno gli stessi criteri di ordinamento e la search.score
funzione non viene usata (ad esempio, se si ordina in base a un campo numerico Rating
e tre documenti hanno una classificazione pari a 4), i legami verranno interrotti per punteggio del documento in ordine decrescente. Quando i punteggi del documento sono uguali (ad esempio, quando non è specificata alcuna query di ricerca full-text nella richiesta), l'ordinamento relativo dei documenti associati è indeterminato.
È possibile specificare più criteri di ordinamento. L'ordine delle espressioni determina l'ordinamento finale. Ad esempio, per ordinare in ordine decrescente in base al punteggio, seguita da Rating, la sintassi sarà $orderby=search.score() desc,Rating desc
.
La sintassi per geo.distance
in $orderby è la stessa che in $filter. Quando si usa geo.distance
in $orderby, il campo a cui si applica deve essere di tipo Edm.GeographyPoint
e deve anche essere sortable
.
La sintassi per search.score
in $orderby è search.score()
. La funzione search.score
non accetta parametri.
Esempi
Ordinare gli alberghi per tariffa di base crescente:
$orderby=BaseRate asc
Ordinare gli alberghi per classificazione decrescente, quindi per tariffa di base crescente. Tenere presente che l'ordinamento predefinito è crescente:
$orderby=Rating desc,BaseRate
Ordinare gli hotel decrescente in base alla classificazione, quindi crescente per distanza dalle coordinate specificate:
$orderby=Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc
Ordinare gli hotel in ordine decrescente in base a search.score e classificazione e quindi in ordine crescente in base alla distanza dalle coordinate specificate. Tra due hotel con punteggi di pertinenza e classificazioni identici, quello più vicino è elencato per primo:
$orderby=search.score() desc,Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc