Azure AI 搜尋服務中的 OData $orderby 語法

注意

Azure AI 搜尋服務 可透過 Azure 入口網站REST APIAzure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。

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

欄位路徑建構和常數會在 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.distancesearch.score 的呼叫。

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

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

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

$orderby中的語法與在$filter中的語法相同。 在 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

另請參閱