使用现有字段进行Solr排名

时间:2019-01-08 10:15:48

标签: solr

我正在使用DataImportHandler从mysql数据库加载到Solr数据中。每个文档都包含一个popularity字段(int类型),该字段是从另一个应用程序计算出并保存到mysql中的(该字段基于与应用程序域相关的某些规则)。

我如何使用此值来提高solr排名?以score值对popularity的solr {strong>求和是否正确? bf如何在这里使用?

1 个答案:

答案 0 :(得分:1)

一个可行的良好起点是将分数乘以(随着时间的增加)受欢迎程度逐渐增加的亚线性函数。例如,

newScore = score * log(1 + 0.5 * popularity)

要应用此增强功能,您应该使用Solr的EDisMax query parser并通过以下值传递the boost parameter

&boost=log(sum(1, product(0.5, popularity)))

其中,popularity是该字段的名称。您无需使用bf参数,因为您应该使用乘法提升,而不是加法提升。

添加1的原因是为了处理popularity=0的情况(因此,如果每个文档的受欢迎程度始终至少为1,则不需要添加1)。通过将0.5系数更改为其他某个值,可以增加或减小普及效果的强度。例如,您可以使用系数2来增强效果:

newScore = score * log(1 + 2 * popularity)

一个不错的因素可能是9 / m左右,其中m是您所期望的普及程度的中位数,因为在这种情况下,“中位数文档”的增长(在某种程度上,它是普及程度的中位数等于m)将为1(也就是说,其分数根本不会提高)。

同样,这只是一个起点,您必须尝试各种增强功能,直到找到性能良好的增强功能。