Partager via


Syntaxe OData $orderby dans Azure AI Recherche

Dans Azure AI Recherche, le paramètre $orderby spécifie un ordre de tri personnalisé pour les résultats de la recherche. Cet article décrit la syntaxe OData de $orderby et fournit des exemples.

La construction du chemin des champs et les constantes des champs sont décrites dans la Vue d’ensemble du langage OData dans Azure AI Recherche. Pour plus d’informations sur les comportements de tri, consultez Classement des résultats.

Syntaxe

Le paramètre $orderby accepte une liste séparée par des virgules de 32 clauses orderby. La syntaxe d’une clause orderby est décrite par l’extension EBNF suivante (Extended Backus-Naur Form) :

order_by_clause ::= (field_path | sortable_function) ('asc' | 'desc')?

sortable_function ::= geo_distance_call | 'search.score()'

Un diagramme de syntaxe interactif est également disponible :

Chaque clause possède des critères de tri, éventuellement suivis d’un ordre de tri (asc pour l’ordre croissant ou desc pour l’ordre décroissant). Si vous ne spécifiez pas d’ordre, la valeur par défaut est croissant. Si le champ contient des valeurs Null, celles-ci s’affichent en premier si le tri est asc et en dernier si le tri est desc.

Le critère de tri peut être le trajet d’un champ sortable, ou un appel à pour les fonctions geo.distance ou search.score.

Pour les champs de chaîne, l’ordre de tri ASCII par défaut et l’ordre de tri Unicode par défaut sont utilisés. Par défaut, le tri respecte la casse, mais vous pouvez utiliser un normaliseur pour prétraiter le texte avant le tri pour modifier ce comportement. Vous pouvez également utiliser un asciifolding normaliseur pour convertir des caractères non-ASCII en leur équivalent ASCII, le cas échéant.

Si plusieurs documents ont les mêmes critères de tri et que la fonction search.score n’est pas utilisée (par exemple si vous triez sur un champ numérique Rating et que trois documents ont une évaluation de 4), les regroupements sont effectués par score des documents en ordre décroissant. Quand les scores des documents sont identiques (par exemple quand aucune requête de recherche en texte intégral n’est spécifiée dans la demande), l’ordre relatif des documents regroupés est indéterminé.

Vous pouvez spécifier plusieurs critères de tri. L’ordre des expressions détermine l’ordre de tri final. Par exemple, pour trier par ordre décroissant sur le score, suivi de l’évaluation, la syntaxe est $orderby=search.score() desc,Rating desc.

La syntaxe pour geo.distance dans $orderby est la même que dans $filter. Lors de l’utilisation de geo.distance dans $orderby, le champ auquel elle s’applique doit être de type Edm.GeographyPoint et être aussi sortable.

La syntaxe pour search.score dans $orderby est search.score(). La fonction search.score ne prend aucun paramètre.

Exemples

Tirer les hôtels par ordre croissant sur le tarif de base :

    $orderby=BaseRate asc

Trier les hôtels par ordre décroissant sur l’évaluation, puis par ordre croissant sur le tarif de base (rappelez-vous que l’ordre croissant est la valeur par défaut) :

    $orderby=Rating desc,BaseRate

Trier les hôtels par ordre décroissant sur l’évaluation, puis par ordre croissant sur la distance à partir des coordonnées spécifiées :

    $orderby=Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc

Trier les hôtels par ordre décroissant sur search.score et l’évaluation, puis par ordre croissant sur la distance à partir des coordonnées spécifiées. Entre deux d’hôtels avec des scores ou une évaluation identique, le plus proche est listé en premier :

    $orderby=search.score() desc,Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc

Voir aussi