我使用了以下请求
http://localhost:8983/solr/test6/select?q=*:*&sort=product(score,hits)%20desc
根据结果的相关性得分对结果进行排序,相关性得分是由Apache Solr乘以名为hits(整数)的字段得出的。
但是,我收到以下错误消息:
{ "responseHeader":{
"status":400,
"QTime":0,
"params":{
"q":"*:*",
"sort":"product(score,hits) desc"}}, "error":{
"metadata":[
"error-class","org.apache.solr.common.SolrException",
"root-error-class","org.apache.solr.common.SolrException"],
"msg":"sort param could not be parsed as a query, and is not a field that exists in the index: product(score,hits)",
"code":400}}
为什么在以下情况下排序不能正确输入函数值?
http://localhost:8983/solr/test6/select?q=*:*&sort=score%20desc
http://localhost:8983/solr/test6/select?q=*:*&sort=hits%20desc
不应用功能时可以工作吗?
注意:在我添加了product()函数的http://localhost:8983/solr/test6/select?q=*:*&sort=product(hits,2)%20desc
处也返回了相同的错误消息。
答案 0 :(得分:1)
score
值实际上不是一个字段-因此您不能使用函数在sort子句中对其进行操作。
相反,您可以通过boost
(如果使用edismax)使用乘法提升来实现所需的目标:&boost=hits
。您可能想使用log(hits)
或类似的东西(例如recip
)来避免由于点击数的微小变化而导致得分大的差异。