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:

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

Vedi anche