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 :
Remarque
Consultez Informations de référence sur la syntaxe d’expression OData pour Azure AI Recherche pour avoir le format EBNF complet.
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