注意
Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。
在 Azure AI 搜尋服務中 ,$orderby 參數會指定搜尋結果的自定義排序順序。 本文說明$orderby的 OData 語法,並提供範例。
欄位路徑建構和常數會在 Azure AI 搜尋的 OData 語言概觀中描述。 如需排序行為的詳細資訊,請參閱 排序結果。
語法
$orderby參數接受最多 32 個排序子句的逗號分隔清單。 排序子句的語法由下列 EBNF(扩展的巴科斯-瑙尔形式)描述:
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 時,Null 值會最後出現。
排序準則可以是欄位的路徑 sortable ,或者是對函式 geo.distance 或 search.score 的呼叫。
對於字串欄位,將會使用預設 ASCII 排序順序 和預設 Unicode 排序順序 。 根據預設,排序會區分大小寫,但您可以使用 正規化程式 在排序之前預先處理文字,以變更此行為。 您也可以使用 asciifolding 正規化工具,將非 ASCII 字元轉換成其 ASCII 對等項(如果存在)。
如果多個檔具有相同的排序準則,且 search.score 函式未使用(例如,如果您依數值 Rating 欄位排序,而三份檔都有 4 的評等),則系結會依遞減順序依檔分數中斷。 當檔分數相同時(例如,當要求中沒有指定全文搜索查詢時),則系結檔的相對順序不確定。
您可以指定多個排序準則。 表達式的順序會決定最終的排序順序。 例如,若要依分數排序遞減,後面接著 Rating,語法會是 $orderby=search.score() desc,Rating desc。
geo.distance 中使用 $orderby 時,其套用的欄位必須是 Edm.GeographyPoint 類型,而且也必須是 sortable。
search.score的語法在$orderby中為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 和 rating 的遞減順序排序酒店,然後再依照到指定座標的距離進行遞增排序。 在具有相同相關性分數和評等的兩家酒店之間,最接近的旅館會先列出:
$orderby=search.score() desc,Rating desc,geo.distance(Location, geography'POINT(-122.131577 47.678581)') asc