FieldTermProximity

简介

计算查询词分词词组在指定索引和字段上分布的紧密程度。紧密度可以从一定程度上衡量查询词和字段的相关性,比如查询词为:用户手册,字段1的内容为:开放搜索用户手册,字段2的内容为:用户使用开放搜索手册解决问题。这时候查询词在字段1上的紧密度要大于字段2上的紧密度,而且从字面上可以判断出来查询词和字段1的相关性更好。另外通过紧密度分数我们也能判断出来查询词是否在字段上是连续紧密分布的。

函数列表

函数原型

函数简介

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

构造FieldTermProximity

void setGroupScoreMergeOp(CString opName)

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

double evaluate(OpsScoreParams params)

计算查询词分词词组在字段上分布的紧密程度

函数详情

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

构造FieldTermProximity对象,需要指定待匹配的字段名称。参数列表:params — 算分输入参数,详情请参考OpsScoreParams手册。indexName — 指定的索引名,必须是常量。fieldName — 待匹配的字段名,该字段需要为TEXT或者SHORT_TEXT,并且分词类型为中文基础分词、自定义分词、单字分词、英文分词、模糊分词必须是常量。

void setGroupScoreMergeOp(CString opName)

设置有多个query group时,多个group的分数如何计算。需要在init函数中调用。参数列表:opName — 算子名称,目前支持的算子名称:sum 和 max。sum:表示求和,max:表示求最大值。默认为sum。

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.distribution.FieldTermProximity;

class BasicSimilarityScorer {
    FieldTermProximity _proximity;
    boolean init(OpsScorerInitParams params) {
        _proximity = FieldTermProximity.create(params, "text_index","text");
        _proximity.setGroupScoreMergeOp("max");
        return true;
    }

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