【问题标题】:Solr query - float range with boostingSolr 查询 - 带提升的浮动范围
【发布时间】:2016-11-09 10:26:25
【问题描述】:

实现以下事情的正确方法是什么:

任务:查询电压(浮点)等于100.0且容差-0% / +20%的文档。

q=+电压_f[100.0 TO 120.0]

我希望电压接近下限 (100.0) 的文档获得更多分数,因为电压接近上限 (120.0) 的文档。

反之亦然 - 容差-20% / +0%

q=+电压_f[80.0 TO 100.0]

我希望电压接近上限 (100.0) 的文档获得更多分数,因为电压接近下限 (80.0) 的文档。

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    您可以use the recip function 获取从 1 开始的值,然后随着值的增加逐渐减小:

    执行与recip(x,m,a,b) 实现a/(m*x+b) 的倒数函数,其中 m,a,b 是常数,x 是任意复杂函数。

    当 a 和 b 相等且 x>=0 时,该函数的最大值为 1,随着 x 的增加而下降。一起增加 a 和 b 的值会导致整个函数移动到曲线的更平坦部分。当 x 为 rord(datefield) 时,这些属性可以使其成为提升较新文档的理想函数。

    对于您的第一种情况,可以通过直接使用 recip 并调整 ab 值以满足您的需要来实现。

    对于第二种情况,您可以将abs(sub(100, x)) 用作x,因为它会随着值远离100 而变大。

    recip 调用可以添加到 bf(用于 dismax、edismax)或 boost(edismax)中。

    您的前端必须确定用于 abm 的正确值 - 您可以使用 debugQuery=true 查看提升的贡献程度并进行相应调整。

    【讨论】:

    • 非常适合简单的单参数查询。其他参数的权重会影响评分。我尝试对其他参数应用“负提升”,它现在有效。
    • 根据您的用例,您可以将它们移动到fq(仅过滤而不计分),或者按函数排序(如果您不希望分数计入根本 - 但你可能会这样做)。否则,需要调整权重以获得与您想要实现的目标最相关的结果。
    猜你喜欢
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多