经过广泛的搜索,找到了这样的答案-
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节)
3条答案
按热度按时间baubqpgj1#
当使用Dismax或eDismax时,您应该能够只使用fieldbf(增强函数)参数,并使用您的数值字段的名称填充它。
示例
我有一个文档索引,其中包含一个名为first_publication_year的数值字段。当我对我的索引运行matchAllQuery
*:*
时,所有文档的得分都是1。这使得bf参数的效果更容易看到,因为1是一个简单的除数。该示例适用于任何查询。测试结果
现在,我希望基于该字段提升文档,因此我将该字段名称作为
bf
参数添加测试结果
如果您认为增加得值太小,可以使用函数查询进行调整.此示例将首次发布得年份乘以10.
测试结果
参考资料
这也记录在Solr参考手册中。
bf(增强功能)参数
bf参数指定函数(具有可选的boosts),这些函数将用于构造FunctionQueries,这些FunctionQueries将作为影响分数的可选子句添加到用户的主查询中。可以使用Solr本地支持的任何函数,沿着boosts值。例如:
kcrjzv8t2#
使用query()函数获取'score'的值。
所以如果你想这样做:new_score =得分 * 受欢迎程度,使用以下格式。
q=搜索项&**排序=产品(查询($q),流行度)**描述
query($q)-返回查询的TF-IDF分数。因此,这相当于使用'score'字段。
scyqe7ek3#
我认为您应该为Solr文档执行索引时间提升。您需要为文档添加一个可选的boost属性。如果您使用SolrJ,则可以使用document.setDocumentBoost(x)将文档提升x倍
您也可以通过this链接了解Solr Documents的索引和查询时间提升的详细描述。