我正在使用 DataImportHandler 将 mysql 数据库中的数据加载到 Solr 中。每个文档都包含一个 popularity
字段(int
类型),该字段是从另一个应用程序计算出来并保存到 mysql 中的(该字段基于与应用程序域相关的一些规则)。
我如何使用这个值来提高 solr 排名?将 solr score
与 popularity
值相加是否正确?
如何bf可以在这里使用吗?
最佳答案
一个可能有效的良好起点是将分数乘以随着受欢迎程度而(缓慢)增加的次线性函数。例如,
newScore = score * log(1 + 0.5 * popularity)
要应用此提升,您应该使用 Solr 的 EDisMax query parser并通过the boost parameter具有以下值:
&boost=log(sum(1, product(0.5, popularity)))
其中流行度是字段的名称。您不需要使用 bf
参数,因为您应该使用乘法提升,而不是加法提升。
之所以加1是为了处理popularity=0
的情况(因此如果每个文档的流行度始终至少为1,则不需要加1)。通过将 0.5 因子更改为其他值,可以增加或减少流行效果的强度。例如,您可以使用因子 2 来增强效果:
newScore = score * log(1 + 2 * popularity)
一个好的因素可能是 9/m
左右,其中 m
是您期望的中值流行度,因为在这种情况下,“中值文档”的提升(中位数是指它的流行度等于m
)将是1(也就是说,它的分数根本不会提高)。
再次强调,这只是一个起点,您必须尝试不同的增强函数,直到找到性能良好的函数。
关于使用现有字段进行 solr 排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089600/