1

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

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

这是我的查询:

/solr/mlt?

q=id:cms.article.137861

&defType=edismax

&rows=3

&缩进=打开

&mlt.fl=series_id,标签,标题,文本

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

&wt=json

&fl=url,标题,标签,django_id,content_type_id

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

4

2 回答 2

1

这是从 solr wiki 中获取的(它已关闭,但我已将其缓存)我认为这就是您要寻找的。

如何提高较新文档的分数

按日期进行显式排序(忽略相关性分数) 对较新的文档使用更大的索引时间提升 使用 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.html http://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 Now主要的“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)。请参阅本主题以获取更多信息。

于 2012-04-18T09:13:08.353 回答
0

显然您的日期字段不是 TrieDate

于 2012-06-22T05:07:27.410 回答