基礎排序即是海選,從檢索結果中快速找到質量高的文檔,取出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:’開放搜索’^60 OR default:’opensearch’^50,希望按照實際匹配詞boost權重來排序。如果文檔A包含“開放搜索”,文檔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的類目匹配分