rainyzz's blog

Solr 排序

在使用 Solr 对网页进行索引搜索的过程中,需要涉及到网页的排序问题。 Solr 本身的排序主要与两部分有关,一部分是系统针对查询词计算出来的 Score(默认使用TF-IDF算法)和每个索引文档本身的 Boost 值。简单来说,Score 越大,文档越往前排,Boost 越大,文档也会越往前排列。最终的分数是 Score * Boost / MaxBoost ,此处的 MaxBoost 为所有的文档中 Boost 值最大的文档的 Boost 值。

如果想要控制文档的排序的话,可以选择修改 Score 的部分,也可以选择 Boost 的部分。修改Score部分就需要重写 TF-IDF 的算法,可以修改 TF,IDF 的权重,甚至将它们的值直接设置成1。修改 Score 只能修改与算法有关的部分,也就是 Term 的频率啊,文档的数量信息啊,无法加入业务逻辑。如果需要涉及业务逻辑,比如我在做的就是需要对指定的网站将其网页排序提高一些,这时候就需要对 Boost 进行修改。

Boost 的值是需要直接写入在索引里的,所以修改 Boost 是需要重新建立索引的。Boost 又分为 Document Boost 和 Field Boost,Document Boost 是用来标识文档的重要性,而 Field Boost 是用来标识某个Field比较重要。最终的总 Boost 值是文档的 Boost 值与该文档所有 Field 的 Boost 值相乘而来的。