Uts*_*v T 9 lucene solr function-query
经过广泛搜索并遇到诸如此类的答案 -
我仍然无法解决以下问题:
如何使用文档的"得分"字段创建新的评分函数并相应地对结果进行排名.像这样的东西 -
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)"
Run Code Online (Sandbox Code Playgroud)
这是我在Elasticsearch中所做的事情 -
"script_score" : {
"script" : "_score * doc['my_numeric_field'].value"
}
Run Code Online (Sandbox Code Playgroud)
请帮助/指出正确的链接.非常感谢 !(注:Solr版本:4.10.4)
使用Dismax或eDismax时,您应该只需使用字段bf(Boost Functions)参数,并使用数字字段的名称填充它.
例
我有一个索引文件,其中包含一个名为first_publication_year的数值.当我*:*对我的索引运行matchAllQuery时,所有文档都会得到1分.这使得bf参数的效果更容易看到,因为1是一个简单的除数.然而,样本将随同任何查询一起使用.
/select?q=*:*
Run Code Online (Sandbox Code Playgroud)
结果
{
"responseHeader": {
"status": 0,
"QTime": 1
},
"response": {
"numFound": 10007277,
"start": 0,
"maxScore": 1,
"docs": [
{
"first_publication_year": 2002,
"score": 1
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想基于该字段提升文档,因此我将该字段名称添加为bf参数
/select?q=*:*&bf=first_publication_year
Run Code Online (Sandbox Code Playgroud)
结果
{
"responseHeader": {
"status": 0,
"QTime": 1
},
"response": {
"numFound": 10007277,
"start": 0,
"maxScore": 1425.5273,
"docs": [
{
"first_publication_year": 2015,
"score": 1425.5273
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
如果您认为提升太微弱,您可以使用函数查询进行调整.此示例将第一个出版年份与10相乘.
/select?q=*:*&bf=product(first_publication_year,10)
Run Code Online (Sandbox Code Playgroud)
结果
{
"responseHeader": {
"status": 0,
"QTime": 465
},
"response": {
"numFound": 10007277,
"start": 0,
"maxScore": 14248.908,
"docs": [
{
"first_publication_year": 2015,
"score": 14248.908
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
参考
Solr参考手册中也记录了这一点.
bf(Boost函数)参数
bf参数指定将用于构造FunctionQueries的函数(带有可选的boost),这些函数将作为将影响分数的可选子句添加到用户的主查询中.可以使用Solr原生支持的任何函数以及增强值.例如:
Run Code Online (Sandbox Code Playgroud)recip(rord(myfield),1,2,3)^1.5
小智 6
请使用query()函数获取“分数”的值。
因此,如果您要这样做:new_score = score * Popularity,请使用以下格式。
q = searchterm&sort = product(query($ q),popularity) desc
query($ q)-返回查询的TF-IDF分数。因此,这等效于使用“得分”字段。