Xapian 学习笔记 3 相关字段的排序
在Xapina中,命中文档的排序是以文档的相关度降序来做的,当两个文档的相关度一样时,按文档id的升序来做,你也可以通过设置enquire.set_docid_order(enquire.DESCENDING)来把其变成降序,或者设置成不关心文档id的排序enquire.set_docid_order(enquire.DONT_CARE);当然这个排序也可以按其它规则来做,或者其它规则与相关度结合来做,下面我们就分析这两种排序方法。
1. 相关度排序
Xapian默认是以BM25算法来计算每一个文档的分数,而BM25(http://xapian.org/docs/bm25.html)的计算所需要的一些参数值是通过在文档索引的时候统计出来的,当然,有一些参数可以在查询的时候动态设定。
另外一些库自带的加分算法有TradWeight,BoolWeight。其中TradWeight实现了最原始的概率模型公式,它是BM25算法的一个特例,只是其中一些参数如k2=0,k3=0和min_normlen=0。而BoolWeight打分器对所有文档的分数都为0,文档的排序由另外一些因素决定。
当然你也可以自定义自己的加分器算法,只要实现Xapian::Weight这个抽象类就可以了,如下是一个同等加分器
class CoordinateWeight : public Xapian::Weight {
public:
CoordinateWeight * clone() const { return new CoordinateWeight; }
CoordinateWeight() { }
~CoordinateW
版权声明:本文为amuseme_lu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。