基礎排序即是海選,從檢索結果中快速找到品質高的文檔,取出TOP N個結果再按照業務排序進行精細算分,最終返回最優的結果給使用者。由此可見,基礎排序對效能影響比較大,業務排序對最終排序效果影響比較大。因此,基礎排序要求盡量簡單有效,只提取業務排序中的關鍵因子即可。同時,基礎排序與業務排序目前均通過排序運算式的方式進行配置。下文將介紹基礎排序中支援的排序特徵函數項。
排序特徵函數項
static_bm25 : 靜態文本相關性,用于衡量query與文檔的匹配度
詳細用法static_bm25()
參數無
傳回值float,範圍為[0,1]
適用情境1:在基礎排序的運算式中指定文本分;運算式中設定:static_bm25()
注意事項
預設基礎排序default中即會生效static_bm25()
static_bm25()得分超過1的情況:
如果使用者查詢時同時配置了查詢分析,比如同義字,預設的查詢是query=index:'蘋果',配置同義字之後的查詢是query=index:'蘋果' OR index:'apple') 那麼如果有文檔內容同時命中了蘋果和apple,此時static_bm25()的得分會被累加,即最後的基礎排序分將大於1
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’]二種參數配置:
timeliness : 時效分,用于衡量文檔的新舊程度
參數pubtime:要評估的欄位,類型必須為int,單位為秒。
傳回值float,範圍為[0,1],值越大表示時效性越好。若大於目前時間則返回0。
適用情境:在基礎排序中指定create_timestamp欄位的時效性;運算式中設定:timeliness(create_timestamp)
注意事項
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使用線性函數轉化。
參數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
category_score:類目預測函數
函數描述:返回參數中指定的類目欄位與類目預測query的類目匹配分