全部產品
Search
文件中心

OpenSearch:FieldMatchWeighted

更新時間:Jul 13, 2024

簡介

計算查詢詞在指定欄位上的匹配度。欄位上命中的查詢詞越多,權重越高,匹配分數也越高。FieldMatchWeighted的分數由兩部分組成,baseScore和bonusScore,計算公式可以簡單表示為:(A*baseScore + bonusScore) / (A + 1)。通過A來調節baseScore所佔的比重。baseScore的計算邏輯可以表示為1。tw表示term的權重,由查詢分析產出,預設為1。bonusScore為加權分數,只有當查詢詞和欄位精確匹配、查詢詞是欄位的一個片段時才進行加權。可以通過FieldMatchWeighted提供的介面函數對paramA與加權分數進行調整。

函數列表

函數原型

函數簡介

FieldMatchWeighted create(OpsScorerInitParams params, CString indexName, CString fieldName)

建立FieldMatchWeighted對象

void setGroupScoreMergeOp(CString opName)

設定多個query group結果的merge方式,可以是sum和max,預設為sum

void setParamA(double paramA)

設定參數A

void setExactMatchBonus(double exactMatchBonus)

設定exact match bonus

void setNgramMatchBonus(double ngramMatchBonus)

設定ngram match bonus

double evaluate(OpsScoreParams params)

計算查詢詞在指定欄位上的匹配度

函數詳情

FieldMatchWeighted create(OpsScorerInitParams params, CString indexName, CString fieldName)

建立FieldMatchWeighted對象,需要指定待匹配的索引名稱和欄位名稱。參數列表:params — 初始化輸入參數,詳情請參考OpsScorerInitParams手冊。indexName — 指定的索引名,必須為常量。fieldName — 索引下的欄位名,該欄位需要為TEXT或者SHORT_TEXT,並且分詞類型為中文基礎分詞、自訂分詞、單字分詞、英文分詞、模糊分詞,必須是常量。

void setGroupScoreMergeOp(CString opName)

設定多個查詢分組之間分數組合規則,目前僅支援max、sum,如果沒有設定預設多個group分數進行sum。該函數必須在算分外掛程式初始化階段調用。查詢分組是指經過查詢分析處理之後對原始查詢詞進行的擴充,預設只有一個查詢分組。參數列表:opName — 多個查詢分組分數組合規則,目前支援max與sum。

void setParamA(double paramA)

設定參數A的值,該參數用於控制baseScore在整體分數中的權重。該函數必須在算分外掛程式初始化階段調用。參數列表:paramA — A的值,預設為0.5。

void setExactMatchBonus(double exactMatchBonus)

設定查詢詞與欄位精確匹配時的加權分數,精確匹配表示查詢詞語欄位內容完全相同。該函數必須在算分外掛程式初始化階段調用。參數列表:exactMatchBonus — 加權分數,預設為1.0。

void setNgramMatchBonus(double ngramMatchBonus)

設定查詢詞是欄位的一個片段時的加權分數,該函數必須在算分外掛程式初始化階段調用。參數列表:ngramMatchBonus — 加權分數,預設為0.6。

double evaluate(OpsScoreParams params)

計算查詢詞在指定索引的指定欄位上的匹配分數。參數列表:params — 算分輸入參數,詳情請參考OpsScoreParams手冊。傳回值:返回查詢詞在欄位上的文本相關性,取值範圍為[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.FieldMatchWeighted;

class BasicSimilarityScorer {
    FieldMatchWeighted _f1;
    boolean init(OpsScorerInitParams params) {
        _f1 = FieldMatchWeighted.create(params, "title_index", "title");
        _f1.setGroupScoreMergeOp("max");
        _f1.setParamA(1);
        _f1.setExactMatchBonus(0.5);
        _f1.setNgramMatchBonus(0.3);
        return true;
    }

    double score(OpsScoreParams params) {
        return _f1.evaluate(params);
    }
}