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
のようになります。
$orderby の geo.distance
の構文は $filter の場合と同じになります。 $orderby で geo.distance
を使用するとき、それが適用されるフィールドは Edm.GeographyPoint
型にする必要があり、また sortable
である必要があります。
$orderby の search.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