Skip to main content

脚本评分 (Script Score)

功能提醒

脚本评分会严重影响搜索的速度,请谨慎测试后使用。

评分是搜索排序中的最重要因素, 使用脚本程序可以改变默认的评分规则, 例如点赞数很高的文章一般质量也比较不错, 我们希望这些文章排在搜索结果前面,但如果简单的设置按点赞数进行排序,其结果是导致一些相关性很低的文章出现在搜索结果的首页,这不是用户所预期的,这个时候脚本评分就派上了用场。我们可以通过脚本实现当匹配度超过某个值时,对点赞数进行加权,这样就可以保证相关性高的文章排在前面。

脚本评分是使用脚本对搜索结果进行重新打分的一种方法,例如下列搜索排序方法:

搜索包含 lucene 关键词的文章,并按推荐和评论数进行排序
GET /_search
{
"query": {
"script_score": {
"query": {
"match": { "content": "lucene" }
},
"script": {
"source": "doc['recomm'].value * 100 + doc['replies'].value"
}
}
}
}

你可以通过 Indexea 的查询定义工具来编写评分脚本,如下图所示:

script scorer

在脚本评分中你可以使用很多内建的函数,详情请看 Script Score

在脚本中使用查询参数

有时候我们希望通过参数去控制脚本评分的逻辑,例如我们希望通过参数控制对点赞数加权量,我们需要先定义一个数值类型的查询变量,将其名称设置为 weight,对应参数名为 weight,并使用默认值为 1.0,如下图所示:

query variables

更多关于查询变量的信息请看 查询变量

接下来我们可以通过 params 参数来使用事先定义好的查询变量,例如如下脚本:

{
"source": "doc['stars'].value * params.weight + _score",
"params": {
"weight": "${weight}"
}
}

需要注意的是,脚本评分可能会导致搜索变慢,请在上线之前进行测试。