Apache Solr根据得分和字段值排序

时间:2019-07-03 18:02:50

标签: apache sorting search solr field

我使用了以下请求

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处也返回了相同的错误消息。

1 个答案:

答案 0 :(得分:1)

score值实际上不是一个字段-因此您不能使用函数在sort子句中对其进行操作。

相反,您可以通过boost(如果使用edismax)使用乘法提升来实现所需的目标:&boost=hits。您可能想使用log(hits)或类似的东西(例如recip)来避免由于点击数的微小变化而导致得分大的差异。