全部產品
Search
文件中心

OpenSearch:基礎排序函數

更新時間:Jun 08, 2026

本文將為您詳細介紹基礎排序中支援的排序特徵函數項。

功能概述

基礎排序即是海選,從檢索結果中快速找到品質高的文檔,取出TOP N個結果再按照業務排序進行精細算分,最終返回最優的結果給使用者。由此可見,基礎排序對效能影響比較大,業務排序對最終排序效果影響比較大。因此,基礎排序要求盡量簡單有效,只提取業務排序中的關鍵因子即可。同時,基礎排序與業務排序目前均通過排序運算式的方式進行配置。

排序特徵函數項

static_bm25 : 靜態文本相關性,用于衡量query與文檔的匹配度

  • 詳細用法請參見static_bm25。

  • 參數:無。

  • 傳回值:float,範圍為[0,1]。

  • 適用情境:在基礎排序的運算式中指定文本分;在運算式中設定:static_bm25()。

  • 注意事項:預設基礎排序default中即會生效static_bm25()。

說明

static_bm25()得分超過1的情況:

如果使用者查詢時同時配置了查詢分析,比如同義字,預設的查詢是query=index:'蘋果',配置同義字之後的查詢是query=index:'蘋果' OR index:'apple'。那麼如果有文檔內容同時命中了蘋果和apple,此時static_bm25()的得分會被累加,即最後的基礎排序分將大於1。

exact_match_boost :擷取查詢中使用者指定的查詢詞權重最大值

  • 詳細用法請參見exact_match_boost。

  • 參數:無。

  • 傳回值:int,範圍為[0, 99]。

  • 適用情境:查詢為query=default:‘OpenSearch’^60 OR default:’opensearch’^50,希望按照實際匹配詞boost權重來排序。如果文檔A包含“OpenSearch”,文檔B包含“opensearch”,則文檔A排到文檔B前面。基礎排序運算式為:exact_match_boost()。

  • 注意事項:

    • 函數參數依賴欄位需建立為索引。

    • 如果對於沒有指定boost的查詢詞預設boost值為99。

    • 獨享型應用,exact_match_boost函數配置在基礎排序中,可支援 [‘’, ‘sum’, ‘max’]三種參數配置:在編輯策略頁面,為 exact_match_boost() 算分特徵的搜尋欄位下拉框中選擇彙總方式:max(取最大值)或 sum(求和),並設定對應的權重值。

timeliness : 時效分,用于衡量文檔的新舊程度

  • 詳細用法:timeliness(pubtime),更多詳情請參見timeliness。

  • 參數pubtime:要評估的欄位,類型必須為int,單位為秒。

  • 傳回值:float,範圍為[0,1],值越大表示時效性越好。若大於目前時間則返回0。

  • 適用情境:在基礎排序中指定create_timestamp欄位的時效性;在運算式中設定timeliness(create_timestamp)。

  • 注意事項:pubtime欄位必須配置為屬性欄位。

timeliness_ms : 時效分,用于衡量文檔的新舊程度

  • 詳細用法:timeliness_ms(pubtime),更多詳情請參見timeliness_ms。

  • 參數pubtime:要評估的欄位,類型必須為int,單位為毫秒。

  • 傳回值:float,範圍為[0,1],值越大表示時效性越好。若大於目前時間則返回0。

  • 適用情境:在基礎排序中指定create_timestamp欄位的時效性;在運算式中設定:timeliness_ms(create_timestamp)。

  • 注意事項:pubtime欄位必須配置為屬性欄位。

normalize :歸一化函數,根據不同的算分將數值歸一化至[0, 1]

  • 情境概述:相關性計算過程中,一篇doc的好壞需要從不同的維度衡量。而各個維度分數範圍可能不同,比如網頁點擊數可能是成百上千萬,網頁的文本相關性分數在[0, 1]之間,它們之間沒有可比性。為了在公式中使用這些元素,需要將不同的分數歸一化至同一個範圍區間,而normalize為這種歸一化提供了一種簡便的方法。normlize支援三種歸一化方法:線性函數轉化、對數函數轉化、反正切函數轉化。根據傳入參數的不同,normalize自動選擇不同的歸一化方法。如果只指定value參數,normalize使用反正切函數轉化,如果指定了value和max參數,normalize使用對數函數轉化,如果指定了value、max和min,normalize使用線性函數轉化。

  • 詳細用法:normalize(value, max, min),更多詳情請參見normalize。

  • 參數value:需要做歸一化的值,支援double類型的浮點數,該值可以來自文檔中的欄位或者其他運算式max:value的最大值,可選,支援double類型的浮點數min:value的最小值,可選,支援double類型的浮點數

  • 傳回值:double,[0, 1]之間的值。

  • 適用情境:

    • 情境1:對price欄位做歸一化,但是不知道price的範圍,可以使用如下公式進行歸一化normalize(price)。

    • 情境2:對price欄位做歸一化,但是只知道price的最大值為100,可以使用如下公式進行歸一化normalize(price, 100)。

    • 情境3:對price欄位做歸一化,並且知道price的最大值為100,最小值為1,可以使用如下公式進行歸一化normalize(price, 100, 1)。

    • 情境4:將distance函數的結果歸一化至[0, 1]normalize(distance(longitude_in_doc, latitude_in_doc, longtitude_in_query, latitude_in_query))。

  • 注意事項:

    • 函數參數需建立為屬性。

    • 使用反正切函數進行歸一化時,如果value小於0,歸一化後的值為0。

    • 使用對數函數進行歸一化時,max的值要大於1。

    • 使用線性函數進行歸一化時,max要大於min。