簡介
BM25F是在BM25的基礎上,計算查詢詞在多個欄位上的文本相關性。每個欄位可以設定不同的權重,BM25F對多個欄位的BM25分數進行整合。BM25F的計算公式可以表示如下:

函數列表
函數原型 | 函數簡介 |
BM25F create(OpsScorerInitParams params,CString indexName) | 工廠函數,建立BM25F對象,指定索引名稱 |
工廠函數,建立BM25F對象,指定索引名稱以及該索引下的欄位名稱。 | |
void setGroupScoreMergeOp(CString opName) | 設定多個query group結果的merge方式,可以是sum和max,預設為sum。 |
void setParamK(double paramK) | 設定參數K |
void setFieldParamB(CString fieldName, double paramB) | 設定某個欄位的參數B |
void setTotalDocNum(long totalDocNum) | 設定總文檔數 |
void setFieldAvgLength(CString fieldName, int avgFieldLength) | 設定某個欄位的平均長度 |
void setFieldWeight(CString fieldName, double fieldWeight) | 設定某個欄位的權重 |
double evaluate(OpsScoreParams params) | 計算查詢詞在指定欄位上的匹配度 |
函數詳情
BM25F create(OpsScorerInitParams params,CString indexName)
建立BM25F對象,需要指定待匹配的索引名稱。沒有指定欄位名時,預設該索引下的所有欄位都參與BM25F的計算。參數列表:params — 初始化輸入參數,詳情請參考OpsScorerInitParams手冊。indexName — 索引名,必須是常量。
BM25F create(OpsScorerInitParams params,CString indexName, CString[] fields)
建立BM25F對象,需要指定待匹配的索引名稱與參與計算的欄位列表。參數列表:params — 初始化輸入參數,詳情請參考OpsScorerInitParams手冊。indexName — 索引名,必須是常量。fields — 需要參與BM25F計算的欄位列表。
void setGroupScoreMergeOp(CString opName)
設定多個查詢分組之間分數組合規則,目前僅支援max、sum,如果沒有設定預設多個group分數進行sum。該函數必須在算分外掛程式初始化階段調用。查詢分組是指經過查詢分析處理之後對原始查詢詞進行的擴充,預設只有一個查詢分組。參數列表:opName — 多個查詢分組分數組合規則,目前支援max與sum。
void setParamK(double paramK)
設定參數
的值,該函數必須在算分外掛程式初始化階段調用。參數列表:paramK —
的值,預設為2.0。
void setFieldParamB(CString fieldName, double paramB)
設定計算欄位BM25時參數B的值,該函數必須在算分外掛程式初始化階段調用。參數列表:fieldName — 欄位名稱,欄位需要為指定索引中含有的欄位,如果在建立BM25F對象是指定了欄位列表,fieldName需要在欄位列表中出現,需要為字串常量。paramB — b的值,預設為0.1。
void setTotalDocNum(long totalDocNum)
設定應用的文檔個數,該函數必須在算分外掛程式初始化階段調用。參數列表:totalDocNum — 文檔個數,預設為92000000。
void setFieldAvgLength(CString fieldName, int avgFieldLength)
設定欄位的平均長度,該函數必須在算分外掛程式初始化階段調用。參數列表:fieldName — 欄位名稱,欄位需要為指定索引中含有的欄位,如果在建立BM25F對象是指定了欄位列表,fieldName需要在欄位列表中出現,需要為字串常量。avgFieldLength — 欄位的平均長度,預設為20。
void setFieldWeight(CString fieldName, double fieldWeight)
設定欄位的權重,該函數必須在算分外掛程式初始化階段調用。參數列表:fieldName — 欄位名稱,欄位需要為指定索引中含有的欄位,如果在建立BM25F對象是指定了欄位列表,fieldName需要在欄位列表中出現,需要為字串常量。fieldWeight — 欄位的權重,預設為1.0。
double evaluate(OpsScoreParams params)
計算BM25F的值。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。傳回值:BM25F分數,取值範圍為[0, 1]。程式碼範例:
package users.scorer;
import com.aliyun.opensearch.cava.framework.OpsScoreParams;
import com.aliyun.opensearch.cava.framework.OpsScorerInitParams;
import com.aliyun.opensearch.cava.features.similarity.fieldmatch.BM25F;
class BasicSimilarityScorer {
BM25F _f1;
boolean init(OpsScorerInitParams params) {
CString[] fields1 = {"title", "body"};
_f1 = BM25F.create(params, "default", fields1);
_f1.setFieldAvgLength("title", 10);
_f1.setFieldWeight("title", 10D);
_f1.setFieldParamB("title", 0.6);
_f1.setFieldAvgLength("body", 100);
_f1.setFieldWeight("body", 2D);
_f1.setFieldParamB("body", 0.5);
return true;
}
double score(OpsScoreParams params) {
return _f1.evaluate(params);
}
};