【问题标题】:Need to check for range in Solr if function如果函数需要检查 Solr 中的范围
【发布时间】:2014-11-28 08:41:15
【问题描述】:

我们只是为知识库构建 Solr 索引,我在实施时遇到了一些问题 助推。 首先:我们希望有乘法提升而不是加法。

并且:文档的点击次数越多,它应该被提升的越多,但只是在一定程度上。 首先,我们想到了一个像 boost=sum(div(hits,10000),1) 这样的函数,但这会推动某些 文档太多。

所以我们想到了这样的事情 (除了其他一些,但这些都有效,只有这些给我一个错误):

 &boost=if(hits,[0+TO+100],1)
 &boost=if(hits,[101+TO+250],1.25)
 &boost=if(hits,[250+TO+100000],1.5)

错误是:

org.apache.solr.search.SyntaxError: Expected identifier at pos 8 str='if(hits,[101 TO 250],1.25)'

所以显而易见的原因是 if 函数中的范围,如果我用单个值删除它,一切正常,但这对我没有帮助。

所以我的问题是:是否不可能将“if()”函数与一系列值结合起来进行匹配? 我知道我可以尝试一百万种不同的方法来解决这个问题,但实际上我们会很高兴以某种方式拥有它,因为 boost 参数值可以针对不同的范围进行配置,并且很容易让该语法与我们的访问 Solr 的框架。

但是,如果没有机会让它运行,我当然愿意接受替代解决方案。

非常感谢,

马库斯

【问题讨论】:

    标签: solr solr-query-syntax


    【解决方案1】:

    您可以使用bq (Boost Query),如下:

    &bq=hits:[0 TO 100]^1.0
    

    【讨论】:

      【解决方案2】:

      所以要在这里清理它: 不能在 if 函数中使用范围。

      但是我们找到了一种使用 map 函数的方法,它几乎可以实现我们想要实现的目标 if-range 尝试:

       &boost=map(hits, 0, 100, 1, map(hits,101, 250, 1.25, map(hits,250, 10000, 1.5)))
      

      【讨论】:

      • 您能否提供有关如何使用 boost= 参数的文档链接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2011-11-28
      相关资源
      最近更新 更多