Azure AI 搜尋中的 OData $orderby語法

在 Azure AI 搜尋服務中 ,$orderby 參數會指定搜尋結果的自訂排序次序。 本文說明$orderby OData 語法,並提供範例。

欄位路徑建構和常數會在 Azure AI 搜尋 的 OData 語言概觀中 描述。 如需排序行為的詳細資訊,請參閱 排序結果

語法

$orderby 參數接受最多 32 個排序子句 的逗號分隔清單。 order-by 子句的語法由下列 EBNF 描述( Extended Backus-Naur Form ):

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

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

您也可以使用互動式語法圖表:

注意

如需完整的 EBNF,請參閱 Azure AI 搜尋 的 OData 運算式語法參考。

每個子句都有排序準則,選擇性地後面接著排序方向( asc 針對遞增或 desc 遞減)。 如果您未指定方向,則預設值為遞增。 如果欄位中有 Null 值,如果排序為 asc ,則 Null 值會先出現,如果排序為 ,則為最後一 desc 個。

排序準則可以是欄位的路徑 sortable ,或對 geo.distance 或 函式的 search.score 呼叫。

對於字串欄位,將會使用預設 ASCII 排序次序 和預設 Unicode 排序次序 。 根據預設,排序會區分大小寫,但您可以使用 正規化程式 在排序之前預先處理文字,以變更此行為。 如果存在,您也可以使用 asciifolding 正規化程式,將非 ASCII 字元轉換成其 ASCII 對等專案。

如果多個檔具有相同的排序準則,且 search.score 函式未使用(例如,如果您依數值 Rating 欄位排序,而三份檔都有 4 的評等),則系結會依遞減順序依檔分數中斷。 當檔分數相同時(例如,當要求中沒有指定全文檢索搜尋查詢時),則系結檔的相對順序不確定。

您可以指定多個排序準則。 運算式的順序會決定最終的排序次序。 例如,若要依分數排序遞減,後面接著 Rating,語法會是 $orderby=search.score() desc,Rating desc

$orderby 語法與$filter中的 語法 geo.distance 相同。 在 $orderby中使用 geo.distance 時,其套用的欄位必須是 型 Edm.GeographyPoint 別,而且也必須是 sortable

$orderby 中的 語法 search.scoresearch.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 和 rating 依遞減順序排序旅館,然後依距離指定座標的距離遞增順序排序酒店。 在具有相同相關性分數和評等的兩家酒店之間,最接近的旅館會先列出:

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

另請參閱