gpt4 book ai didi

groovy - script_score 在 elastic 1.3 中使用 lang groovy 返回 0

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

我是弹性新手。我正在使用 function_score 来自定义分数。这是我的代码:

body = {
"from" : product_per_page*page,
"size" : product_per_page,
"query": {
"function_score": {
"query": {
"bool":{
"must": [
{
"range": {
"price": {
"gte": from_price,
"lte": to_price
}
}
}, {
"match":{
"text": {
"query": query,
}
},
}
]
},
},
"script_score": {
"script": "floor(_score)*doc['boost'].value",
"lang":"groovy"
},
"boost_mode": "replace",
},
}
}

问题是分数总是返回 0.0。 当我将脚本设置为:

"script": "_score"

它将返回正确的分数,例如 0.98977035(0.0 到 1.0 之间的数字)。也当设置为:

"script": "_score + 0.0001"

再次返回正确的结果。但是当我使用这个时:

"script": "_score + 1"

它返回 1.0 或:

"script": "_score *10"

返回 0.0(并且我使用的任何函数都会返回 0.0)。还有:

"script": "doc['boost'].value"

返回 0.0(doc['boost'].value 介于 10 和 100 之间)

我也尝试过:

"script": "32"

它返回 32 (如我所料)。所以我猜这个问题很常见。也许当数字很大时,它们会四舍五入到 0.0。我应该怎么办?谢谢

最佳答案

我找到了解决方案,但没有找到问题!如果我使用 floor( _score*10.0 ) 它将返回正确的答案!(我不知道为什么)以及关于 "script": "doc['boost'].value" 它将 float 转换为 Integer(我还无法解决 float 的问题)。

关于groovy - script_score 在 elastic 1.3 中使用 lang groovy 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27780052/

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