Skip to content
This repository has been archived by the owner on Oct 13, 2021. It is now read-only.

Latest commit

 

History

History
executable file
·
36 lines (28 loc) · 1.5 KB

custom_scoring_criteria.md

File metadata and controls

executable file
·
36 lines (28 loc) · 1.5 KB

自定义评分字段和评分规则

riot 引擎支持在排序器内存中保存一些评分字段,并利用自定义评分规则给文档打分。例子:

// 自定义评分字段
type MyScoringFields struct {
	// 加入一些文档排序用的数据,可以是任意类型,比如:
	label string
	counter int32
	someScore float32
}

// MyScoringCriteria 实现了 types.ScoringCriteria 接口,也就是下面的 Score 函数
type MyScoringCriteria struct {
}
func (criteria MyScoringCriteria) Score(
	doc types.IndexedDoc, fields interface{}) []float32 {
	// 首先检查评分字段是否为 MyScoringFields 类型的,如果不是则返回空切片,此文档将从结果中剔除
	if reflect.TypeOf(fields) != reflect.TypeOf(MySearchFields{}) {
		return []float32{}
	}
	
	// 匹配则进行类型转换
	myFields := fields.(MySearchFields)
	
	// 下面利用 myFields 中的数据给文档评分并返回分值
}

文档的 MyScoringFields 数据通过 riot.Engine 的 Index 函数传给排序器保存在内存中。然后通过 Search 函数的参数调用 MyScoringCriteria 进行查询。

当然,MyScoringCriteria的Score 函数也可以通过 docId 从硬盘或数据库读取更多文档数据用于打分,但速度要比从内存中直接读慢许多,请在内存和速度之间合适取舍。

examples/weibo/custom_scoring_criteria.go 中包含了一个利用自定义规则查询微博数据的例子。