全部產品
Search
文件中心

OpenSearch:基礎排序函數

更新時間:Jul 13, 2024

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

排序特徵函數項

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

  1. 詳細用法static_bm25()

  2. 參數無

  3. 傳回值float,範圍為[0,1]

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

  5. 注意事項

    • 預設基礎排序default中即會生效static_bm25()

說明

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

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

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

  1. 詳細用法exact_match_boost()

  2. 參數無

  3. 傳回值int,範圍為[0, 99]

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

  5. 注意事項

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

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

    • 獨享型應用,exact_match_boost函數配置在基礎排序中,可支援 [‘sum’, ‘max’]二種參數配置:1

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

  1. 詳細用法timeliness(pubtime)

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

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

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

  5. 注意事項

    • pubtime欄位必須配置為屬性欄位。

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

  1. 詳細用法timeliness_ms(pubtime)

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

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

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

  5. 注意事項

    • pubtime欄位必須配置為屬性欄位。

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

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

  2. 詳細用法:normalize(value, max, min)

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

  4. 傳回值double,[0, 1]之間的值。

  5. 適用情境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))

  6. 注意事項:

    • 函數參數需建立為屬性

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

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

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

category_score:類目預測函數

函數描述:返回參數中指定的類目欄位與類目預測query的類目匹配分

  1. 詳細用法

    category_score(cate_id)

  2. 參數

    cate_id:訓練時作為類目ID的欄位,類型必須為int。

  3. 傳回值INT,範圍為[0,2]。

  4. 適用情境:可以參考類目預測功能使用情境;運算式中設定:category_score(cate_id)

  5. 注意事項