gpt4 book ai didi

elasticsearch - 如何提高 elasticsearch 函数得分中的字段长度范数?

转载 作者:行者123 更新时间:2023-11-29 02:45:28 25 4
gpt4 key购买 nike

我知道 elasticsearch 在计算查询检索到的文档的分数时会考虑字段的长度。字段越短,权重越高(参见 The field-length norm )。

我喜欢这种行为:当我搜索 iphone 时,我对 iphone 6Crappy accessories for: iphone 5 iphone 5s iphone 6 更感兴趣

现在,我想尝试提升这个东西,假设我想将它的重要性加倍。

我知道可以使用 function score 修改分数,我想我可以通过 script 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()]]

编辑:我提供了第一个答案,但我希望有一个更好的答案

最佳答案

看起来你可以使用 type token_count 的字段来实现它连同 field_value_factor function score .

所以,在字段映射中是这样的:

"name": { 
"type": "string",
"fields": {
"length": {
"type": "token_count",
"analyzer": "standard"
}
}
}

这将使用字段中的 token 数。如果要使用字符数,可以将分析器从 standard 更改为对每个字符进行标记化的自定义分析器。

然后在查询中:

"function_score": {
...,
"field_value_factor": {
"field": "name.length",
"modifier": "reciprocal"
}
}

关于elasticsearch - 如何提高 elasticsearch 函数得分中的字段长度范数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32059804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com