TextRelevance

简介

计算查询词在指定索引和字段上的文本相关性。TextRelevance主要从下面几个维度衡量相关性:命中词在查询词中所占比重;命中词在字段中所占比重;命中词在字段中出现的频率;字段中命中词之间的顺序关系与查询词中命中词之间的顺序关系。分数越大表名查询词语字段越相关。从实现上讲,TextRelevance是FieldMatchWeightedBM25FieldTermProximity三个feature的组合,可以通TextRelevance提供的接口对这些feature的权重进行调整,从而定制自己的TextRelevance。

函数列表

函数原型

函数简介

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

创建TextRelevance

void setGroupScoreMergeOp(CString opName)

设置多个query group结果的merge方式,可以是sum和max,默认为sum。

void setFieldBm25Weight(double weight)

设置bm25的权重

void setFieldMatchWeightedWeight(double weight)

设置FieldMatchWeighted的权重

void setFieldTermProximityWeight(double weight)

设置FieldTermProximity的权重

double evaluate(OpsScoreParams params)

计算查询词在指定字段上的文本相关性

函数详情

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

创建TextRelevance对象,用于计算查询词与指定索引下的指定字段的相关性。参数列表:params — 算分输入参数,详情请参考OpsScorerInitParams手册。indexName — 指定的索引名,必须是常量。fieldName — 索引下的字段名,该字段需要为TEXT或者SHORT_TEXT,并且分词类型为中文基础分词、自定义分词、单字分词、英文分词、模糊分词,必须是常量。

void setGroupScoreMergeOp(CString opName)

设置多个查询分组之间分数组合规则,目前仅支持max、sum,如果没有设置默认多个group分数进行sum。该函数必须在算分插件初始化阶段调用。查询分组是指经过查询分析处理之后对原始查询词进行的扩展,默认只有一个查询分组。参数列表:opName — 多个查询分组分数组合规则,目前支持max与sum。

void setFieldBm25Weight(double weight)

设置Bm25的权重,必须在算分插件初始化阶段调用,默认权重为0.5。参数列表:weight — 权重值。

void setFieldMatchWeightedWeight(double weight)

设置MatchWeighted权重,必须在算分插件初始化阶段调用,默认权重为5。参数列表:weight — 权重值。

void setFieldTermProximityWeight(double weight)

设置TermProximity权重,必须在算分插件初始化阶段调用,默认权重为9。参数列表:weight — 权重值。

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.framework.OpsRequest;
import com.aliyun.opensearch.cava.framework.OpsDoc;
import com.aliyun.opensearch.cava.features.similarity.TextRelevance;

class BasicSimilarityScorer {
    TextRelevance _f1;
    boolean init(OpsScorerInitParams params) {
        _f1 = TextRelevance.create(params, "text_index", "text");
        _f1.setGroupScoreMergeOp("max");
        _f1.setFieldBm25Weight(2);
        _f1.setFieldMatchWeightedWeight(3);
        _f1.setFieldTermProximityWeight(4);
        return true;
    }

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