简介
计算查询词在某个字段上命中的分词词组个数与该词组在字段上的最小窗口的比值。在构建索引时,字段分词之后,OpenSearch会为每一个词组分配一个位置ID(每个字段都从0开始)。例如字段title的分词之后为:开放 搜索 用户 手册,位置ID分别为0、1、2、3。假设查询词分词之后为:搜索 手册,那么在计算QueryMinSlideWindow(title)时命中的词组个数为2,最小窗口为3。
函数列表
函数原型 | 函数简介 |
QueryMinSlideWindow create(OpsScorerInitParams params, CString indexName, CString fieldName) | 构造QueryMinSlideWindow对象 |
QueryMinSlideWindow create(OpsScorerInitParams params, CString indexName, CString fieldName, boolean inOrder) | 构造QueryMinSlideWindow对象,并指定计算最小窗口时是否需要保序 |
double evaluate(OpsScoreParams params) | 计算查询词中命中的词组与总词组的比值 |
函数详情
QueryMinSlideWindow create(OpsScorerInitParams params, CString indexName, CString fieldName)
构造QueryMinSlideWindow对象,计算查询词在某个字段上命中的分词词组个数与该词组在字段上的最小窗口的比值。参数列表:params — 算分输入参数,详情请参考OpsScorerInitParams.indexName — 指定的索引名,分词类型为中文基础分词、自定义分词、单字分词、英文分词、模糊分词,必须是常量。fieldName — 待匹配的字段名,该字段需要为TEXT或者SHORT_TEXT,必须是常量。
QueryMinSlideWindow create(OpsScorerInitParams params, CString indexName, CString fieldName, boolean inOrder)
构造QueryMinSlideWindow对象,计算查询词在某个字段上命中的分词词组个数与该词组在字段上的最小窗口的比值,在计算最小窗口过程中可以指定窗口中的词组是否和查询词保持一致的顺序。参数列表:params — 算分输入参数,详情请参考OpsScorerInitParams.indexName — 指定的索引名,分词类型为中文基础分词、自定义分词、单字分词、英文分词、模糊分词,必须是常量。fieldName — 待匹配的字段名,该字段需要为TEXT或者SHORT_TEXT,必须是常量。inOrder — 取值为false或者true,为false表示不要保序,为true表示需要保序。
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.QueryMinSlideWindow;
class BasicSimilarityScorer {
QueryMinSlideWindow _f1;
QueryMinSlideWindow _f2;
boolean init(OpsScorerInitParams params) {
_f1 = QueryMinSlideWindow.create(params, "pack_index1", "text_field");
_f2 = QueryMinSlideWindow.create(params, "pack_index1", "text_field", true);
return true;
}
double score(OpsScoreParams params) {
return _f1.evaluate(params) + _f2.evaluate(params);
}
}