【问题标题】:What is the proper way to boost items with newer dates?提升日期较新的项目的正确方法是什么?
【发布时间】:2012-04-18 01:55:57
【问题描述】:

我有一个更像这个查询的查询,我想先更新它以返回较新的文档。根据文档,我需要将recip(ms(NOW,mydatefield),3.16e-11,1,1) 添加到我的查询中。

但是当我尝试将它添加到 mlt.qf 或 bf 参数中时。结果完全一样。

这是我的查询:

/solr/mlt?

q=id:cms.article.137861

&defType=edismax

&rows=3

&indent=on

&mlt.fl=series_id,tags,title,text

&mlt.qf=show_id text^1.1 标题^1.1 标签^90

&wt=json

&fl=url,title,tags,django_id,content_type_id

&bf=recip(ms(NOW,pub_date),3.16e-11,1,1)

【问题讨论】:

    标签: solr full-text-search morelikethis


    【解决方案1】:

    这是从 solr wiki 中获取的(它已关闭,但我已将其缓存) 我想这就是你要找的。​​p>

    如何提高新文档的分数

    按日期进行显式排序(忽略相关性分数) 对较新的文档使用更大的索引时间提升 使用 FunctionQuery 根据日期字段影响分数。 在 Solr 1.3 中,使用形式为 recip(rord(myfield),1,1000,1000) 在 Solr 1.4 中,使用 recip(ms(NOW,mydatefield),3.16e-11,1,1) 形式的东西 http://lucene.apache.org/solr/api/org/apache/solr/search/function/ReciprocalFloatFunction.htmlhttp://lucene.apache.org/solr/api/org/apache/solr/search/BoostQParserPlugin.html 一个查询“ipod”的完整示例,产品越新,得分越高:

    http://localhost:8983/solr/select?q={!boost b=recip(ms(NOW,manufacturedate_dt),3.16e-11,1,1)}ipod 可以通过将查询分解为多个参数来简化实现:

    http://localhost:8983/solr/select?q={!boost b=$dateboost v=$qq}&dateboost=recip(ms(NOW,manufacturedate_dt),3.16e-11,1,1)&qq=ipod 现在主要的“q”参数以及“dateboost”参数可以在 solrconfig.xml 的搜索处理程序中指定为默认值,客户端只需传递“qq”,即用户查询。

    要提升另一种查询类型,例如 dismax 查询,提升查询的值是完整的子查询,因此可以使用 {!querytype} 语法。或者,可以在 boost 本地参数中使用 defType 参数将默认类型设置为 dismax。其他 dismax 参数可以设置为顶级参数。

    http://localhost:8983/solr/select?q={!boost b=$dateboost v=$qq defType=dismax}&dateboost=recip(ms(NOW,manufacturedate_dt),3.16e-11,1,1)&qf=text&pf=text&qq=ipod 考虑使用降低的精度来防止过多的内存消耗。您将改为使用 recip(ms(NOW/HOUR,mydatefield),3.16e-11,1,1)。有关详细信息,请参阅此线程。

    【讨论】:

    • 我已经尝试过这些版本。它们对我产生了完全相同的结果。
    【解决方案2】:

    显然您的日期字段不是 TrieDate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      相关资源
      最近更新 更多