1

我想根据 live_date、标题和关键字来提升内容。

1)我可以使用 qf 和 pf 来提升标题和关键字:

?q=mySearchTerm&fl=id,title,live_date,content,score&sort=score desc&qf=title^2.0 keywords^1.2 content^1.0&pf=title^2.0 keywords^1.2 content^1.0

2)我可以通过使用函数来计算live_datetime到现在并应用recip函数来提升live_date:

?q={!boost b=$recency v=$qq}&recency=recip(ms(NOW/HOUR,live_datetime),3.16e-11,0.08,0.05)&qq="mysearchTerm"&sort=score desc

3)我怎样才能结合1)和2),以便我可以同时提升live_date +标题和关键字?我试过这个但失败了。谁能在这里指出这个问题?谢谢。

?q={!boost b=$recency v=$qq}&recency=recip(ms(NOW/HOUR,live_datetime),3.16e-11,0.08,0.05)
&qq="mysearchTerm"&qf=title^2.0 keywords^1.2 content^1.0&pf=title^2.0 keywords^1.2 content^1.0&fl=live_datetime,score

请指教。非常感谢。

4

2 回答 2

1
?q={!boost b=$recency v=$qq}&recency=recip(ms(NOW/HOUR,live_datetime),3.16e-11,0.08,0.05)
&qq="mysearchTerm"&qf=title^2.0 keywords^1.2 content^1.0&pf=title^2.0
keywords^1.2 content^1.0&fl=live_datetime,score

根据您说确实有效的示例,我怀疑您在 solrconfig.xml 中为您的请求处理程序配置了“defType=dismax”或“defType=edismax”——这是您的示例 #1 会注意您的唯一原因qf 和 pf 参数。

defType 仅适用于解析当前上下文的主查询(即:顶级请求中的“q”;子查询中的 v),在您的示例 #2 和 #3 中,您使用 localparam 语法来覆盖它。为了确保使用 dismax/edismax 解析您的“qq”参数,您需要将 defType 指定为正在解析 qq 的上下文的本地参数...

?q={!boost b=$recency defType=edismax v=$qq}&recency=recip(ms(NOW/HOUR,live_datetime),3.16e-11,0.08,0.05)&qq="mysearchTerm"&qf=title^2.0 keywords^1.2 content^1.0&pf=title^2.0 keywords^1.2 content^1.0&fl=live_datetime,score
...OR...
?q={!boost b=$recency defType=dismax v=$qq}&recency=recip(ms(NOW/HOUR,live_datetime),3.16e-11,0.08,0.05)&qq="mysearchTerm"&qf=title^2.0 keywords^1.2 content^1.0&pf=title^2.0 keywords^1.2 content^1.0&fl=live_datetime,score

或者,如果您正在使用 edismax,那么您可以使用 edismax 解析器的“boost”参数以更简单的语法来完成相同的事情,而不是使用“boost”QParser 来包装“edismax”QParser...

?q="mysearchTerm"&boost=recip(ms(NOW/HOUR,live_datetime),3.16e-11,0.08,0.05)&qf=title^2.0 keywords^1.2 content^1.0&pf=title^2.0 keywords^1.2 content^1.0&fl=live_datetime,score
于 2012-04-13T00:56:16.743 回答
1

为什么不使用增强功能,例如:

?q="mysearchTerm"&qf=title^2.0 关键字^1.2 内容^1.0&pf=title^2.0 关键字^1.2 内容^1.0&fl=live_datetime,score&bf=recip(ms(NOW/HOUR,live_datetime),3.16e-11, 0.08,0.05)^5

于 2012-04-12T20:22:09.957 回答