分享方式:


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

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

欄位路徑建構和常數會在 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

另請參閱