我知道elasticsearch在计算查询检索到的文档的得分时会考虑字段的长度。字段越短,权重就越高(见字段长度规范)。
我喜欢这种行为:当我搜索iphone
时,我更感兴趣的是iphone 6
而不是Crappy accessories for: iphone 5 iphone 5s iphone 6
。
现在,我想尝试提高这些内容的重要性,比如说我想将它们的重要性提高一倍。
我知道可以使用函数评分来修改得分,我猜可以通过脚本评分来实现我的目的。
我试图像这样给得分添加另一个字段长度规范:
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {...},
"script_score": {
"script": "_score + norm(doc)"
}
}
}
}
但是我失败了,出现了这个错误:[No parser for element [function_score]]
编辑:
我的第一个错误是没有将函数得分包含在“query”中。现在我已经编辑了上面的代码。我的新错误信息如下:
GroovyScriptExecutionException[MissingMethodException
[No signature of method: Script5.norm() is applicable for argument types:
(org.elasticsearch.search.lookup.DocLookup) values:
[<org.elasticsearch.search.lookup.DocLookup@2c935f6f>]
Possible solutions: notify(), wait(), run(), run(), dump(), any()]]
编辑:我提供了第一个答案,但我希望有更好的答案。