全部產品
Search
文件中心

OpenSearch:BM25F

更新時間:Jul 13, 2024

簡介

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

函數列表

函數原型

函數簡介

BM25F create(OpsScorerInitParams params,CString indexName)

工廠函數,建立BM25F對象,指定索引名稱

BM25F create(OpsScorerInitParams params,CString indexName, CString[] fields)

工廠函數,建立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)

設定參數1的值,該函數必須在算分外掛程式初始化階段調用。參數列表:paramK — 1的值,預設為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);
    }
};