solr 如何使用“评分”字段创建自定义评分

fzsnzjdm  于 2022-11-05  发布在  Solr
关注(0)|答案(3)|浏览(220)

经过广泛的搜索,找到了这样的答案-
Solr: Sort by score & an int field value
在Solr中使用函数查询提高分数
我仍然无法解决以下问题:

如何使用文档的“score”字段创建新的评分函数并对结果进行相应的排名。类似于-

新分数=分数 * 我的其他字段
当前查询-

http://localhost:8984/solr/suggest_new/select?q=tom&wt=json&indent=true&bq=_val_:"product(score,count_of_searches)"

这是我在Elasticsearch中会做的事情-

"script_score" : {
    "script" : "_score * doc['my_numeric_field'].value"
}

请帮助/指出正确的链接。非常感谢!(注:Solr版本:第4.10.4节)

baubqpgj

baubqpgj1#

当使用Dismax或eDismax时,您应该能够只使用fieldbf(增强函数)参数,并使用您的数值字段的名称填充它。

示例

我有一个文档索引,其中包含一个名为first_publication_year的数值字段。当我对我的索引运行matchAllQuery *:*时,所有文档的得分都是1。这使得bf参数的效果更容易看到,因为1是一个简单的除数。该示例适用于任何查询。

/select?q=*:*

测试结果

{
  "responseHeader": {
    "status": 0,
    "QTime": 1
  },
  "response": {
    "numFound": 10007277,
    "start": 0,
    "maxScore": 1,
    "docs": [
      {
        "first_publication_year": 2002,
        "score": 1
      }
    ]
  }
}

现在,我希望基于该字段提升文档,因此我将该字段名称作为bf参数添加

/select?q=*:*&bf=first_publication_year

测试结果

{
  "responseHeader": {
    "status": 0,
    "QTime": 1
  },
  "response": {
    "numFound": 10007277,
    "start": 0,
    "maxScore": 1425.5273,
    "docs": [
      {
        "first_publication_year": 2015,
        "score": 1425.5273
      }
    ]
  }
}

如果您认为增加得值太小,可以使用函数查询进行调整.此示例将首次发布得年份乘以10.

/select?q=*:*&bf=product(first_publication_year,10)

测试结果

{
  "responseHeader": {
    "status": 0,
    "QTime": 465
  },
  "response": {
    "numFound": 10007277,
    "start": 0,
    "maxScore": 14248.908,
    "docs": [
      {
        "first_publication_year": 2015,
        "score": 14248.908
      }
    ]
  }
}

参考资料

这也记录在Solr参考手册中。

bf(增强功能)参数

bf参数指定函数(具有可选的boosts),这些函数将用于构造FunctionQueries,这些FunctionQueries将作为影响分数的可选子句添加到用户的主查询中。可以使用Solr本地支持的任何函数,沿着boosts值。例如:

recip(rord(myfield),1,2,3)^1.5
kcrjzv8t

kcrjzv8t2#

使用query()函数获取'score'的值。
所以如果你想这样做:new_score =得分 * 受欢迎程度,使用以下格式。
q=搜索项&**排序=产品(查询($q),流行度)**描述
query($q)-返回查询的TF-IDF分数。因此,这相当于使用'score'字段。

scyqe7ek

scyqe7ek3#

我认为您应该为Solr文档执行索引时间提升。您需要为文档添加一个可选的boost属性。如果您使用SolrJ,则可以使用document.setDocumentBoost(x)将文档提升x倍
您也可以通过this链接了解Solr Documents的索引和查询时间提升的详细描述。

相关问题