经过广泛搜索并遇到诸如此类的答案 -
Solr: Sort by score & an int field value
Use function query for boosting score in Solr
我仍然无法解决以下问题:
如何使用"得分"用于创建新评分函数的文档字段并相应地对结果进行排名。像这样的东西 -
new_score =得分* my_other_field
当前查询 -
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)
答案 0 :(得分:8)
使用Dismax或eDismax时,您应该只使用字段 bf (Boost Functions)参数,并使用数字字段的名称填充它。
示例强>
我的文档索引包含名为 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
parameter
/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
}
]
}
}
如果您认为提升太微弱,您可以使用function queries进行调整。此示例将第一个出版年份与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
}
]
}
}
<强>参考强>
the Solr Reference Manual中也记录了这一点。
bf(增强功能)参数
bf参数指定将用于构造FunctionQueries的函数(带有可选的boost),这些函数将作为将影响分数的可选子句添加到用户的主查询中。可以使用Solr原生支持的任何函数以及增强值。例如:
recip(rord(myfield),1,2,3)^1.5
答案 1 :(得分:4)
使用query()函数来获取'score'的值。
因此,如果您正在尝试此操作: new_score =得分*受欢迎程度,请使用以下格式。
q = searchterm&amp; sort = product(查询($ q),受欢迎程度) desc
query($ q) - 返回查询的TF-IDF分数。所以这相当于使用'得分'字段。
答案 2 :(得分:1)
我认为您应该为Solr文档进行索引时间提升。您需要为文档添加可选的boost属性。 如果您使用的是SolrJ,则可以使用document.setDocumentBoost(x)以x的提升因子来提升文档
您还可以按照this链接获取Solr文档索引和查询时间提升的详细说明。