我正在使用DataImportHandler从mysql数据库加载到Solr数据中。每个文档都包含一个popularity
字段(int
类型),该字段是从另一个应用程序计算出并保存到mysql中的(该字段基于与应用程序域相关的某些规则)。
我如何使用此值来提高solr排名?以score
值对popularity
的solr {strong>求和是否正确?
bf如何在这里使用?
答案 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(也就是说,其分数根本不会提高)。
同样,这只是一个起点,您必须尝试各种增强功能,直到找到性能良好的增强功能。