我知道弹性搜索在计算查询检索到的文档的分数时会考虑字段的长度。字段越短,权重越高(请参阅字段长度规范)。
我喜欢这种行为:当我搜索时,iphone
我iphone 6
对Crappy accessories for: iphone 5 iphone 5s iphone 6
.
现在,我想尝试提升这个东西,假设我想加倍它的重要性。
我知道可以使用函数 score修改分数,我想我可以通过脚本 score实现我想要的。
我试图在分数中添加另一个字段长度规范,如下所示:
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {...},
"script_score": {
"script": "_score + norm(doc)"
}
}
}
}
但是我失败了,收到了这个错误:[No parser for element [function_score]]
编辑:
我的第一个错误是我没有将函数得分包装在“查询”中。现在我编辑了上面的代码。我的新错误说
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()]]
编辑:我提供了第一个答案,但我希望有一个更好的答案