Azure AI Search の OData $ordrby 構文

Azure AI Search では、$orderby パラメーターを使用して検索結果のカスタム並べ替え順序を指定します。 この記事では、$orderby の OData 構文について説明し、例を示します。

フィールド パスの構築と定数については、Azure AI Search の OData 言語の概要に関するページを参照してください。 並べ替えの動作の詳細については、「結果の並べ替え」を参照してください。

構文

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

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

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

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

Note

完全な EBNF については、Azure AI Searchの OData 式構文参照 を参照してください。

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

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

文字列フィールドの場合、既定の ASCII 並べ替え順序と既定の Unicode 並べ替え順序が使用されます。 既定では、並べ替えでは大文字と小文字が区別されますが、この動作を変更するために並べ替える前にノーマライザーを使用してテキストを前処理できます。 asciifolding ノーマライザーを使用し、非 ASCII 文字を ASCII に相当する文字に変換することもできます (存在する場合)。

複数のドキュメントで並べ替え基準が同じであり、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

関連項目