简介
计算查询词在指定字段上的匹配度。字段上命中的查询词越多,权重越高,匹配分数也越高。FieldMatchWeighted的分数由两部分组成,baseScore和bonusScore,计算公式可以简单表示为:(A*baseScore + bonusScore) / (A + 1)。通过A来调节baseScore所占的比重。baseScore的计算逻辑可以表示为。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);
}
}