Azure Cognitive Search での OData $orderby 構文

OData $orderby パラメーターを使用すれば、Azure Cognitive Search での検索結果にカスタムの並べ替え順序を適用することができます。 この記事では、 $orderby の構文について詳しく説明します。 検索結果を表示するときに $orderby を使用する方法に関するより一般的な情報については、「Azure Cognitive Search での検索結果の操作方法」を参照してください。

構文

$orderby パラメーターは、最大 32 個の order-by 句 をコンマで区切ったリストを受け取ります。 order-by 句の構文は、次の EBNF (拡張バッカス・ナウア記法) によって記述されます。

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

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

対話型の構文ダイアグラムも利用できます。

注意

完全な EBNF については、Azure Cognitive Search の OData 式構文リファレンスに関するページをご覧ください。

各句にはソート基準を指定し、必要に応じてその後に並べ替え方向 (昇順の場合は asc、降順の場合は desc) を指定します。 方向を指定しない場合、既定値は昇順となります。 フィールドに null 値がある場合、null 値は、並べ替えが asc の場合は最初に、並べ替えが desc の場合は最後に表示されます。

並べ替え基準は sortable フィールドのパスとすることも、geo.distance 関数または search.score 関数の呼び出しとすることもできます。

複数のドキュメントで並べ替え基準が同じであり、search.score 関数が使用されない場合 (たとえば、数値の Rating フィールドで並べ替えるとき、3 つすべてのドキュメントの評価が 4 である場合)、同点にはドキュメント スコアで順位が付けられ、降順で表示されます。 ドキュメント スコアが同じ場合 (たとえば、要求にフルテキスト検索クエリが指定されていない)、同点のドキュメントには相対的な順序付けが確定しません。

複数の並べ替え基準を指定できます。 式の順序によって最終的な並べ替え順序が決められます。 たとえば、スコア別に降順で並べ替えた後、評価で並べ替える場合、構文は $orderby=search.score() desc,Rating desc のようになります。

$orderbygeo.distance の構文は $filter の場合と同じになります。 $orderbygeo.distance を使用するとき、それが適用されるフィールドは Edm.GeographyPoint 型にする必要があり、また sortable である必要があります。

$orderbysearch.score の構文は search.score() です。 関数 search.score には、いかなるパラメーターも取得されません。

基本料金別にホテルを昇順で並べ替えます。

    $orderby=BaseRate asc

評価別にホテルを降順で並べ替え、その後、基本料金別に昇順で並べ替えます (昇順は既定値です)。

    $orderby=Rating desc,BaseRate

評価別にホテルを降順で並べ替え、その後、特定の座標からの距離別に昇順で並べ替えます。

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

search.score と評価に基づいて降順でホテルを並べ替え、その後、特定の座標からの距離別に昇順で並べ替えます。 2 つのホテルで関連性スコアおよび評価が同じ場合、距離的に近い方が先に表示されるようにします。

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

次の手順