使用lang groovy在elastic 1.3中,脚本_得分返回0
我是新来的。我正在使用函数_score自定义分数。这是我的密码:使用lang groovy在elastic 1.3中,脚本_得分返回0,groovy,Groovy,我是新来的。我正在使用函数_score自定义分数。这是我的密码: body = { "from" : product_per_page*page, "size" : product_per_page, "query": { "function_score": { "query": { "bool":{ "m
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(我使用的任何函数,如“脚本”:“floor(\u score)”
返回0.0)。此外:
返回0.0(doc['boost']。值介于10100之间)
我还尝试:
"script": "32"
它返回32(正如我预期的那样),所以我猜问题是groovy。也许当数字很大的时候,它们会四舍五入到0.0。我该怎么办?
谢谢我找到了解决方案,但没有找到问题! 如果我使用
floor(_score*10.0)
它将返回正确答案!(我不知道为什么)
关于
“脚本”:“doc['boost'].value”
它将浮点值转换为整数(我还不能解决浮点值的问题)。你似乎在做地板(_分数)
,这将使0.98977035
为零,那么任何乘以零的值都是零。这只是一个例子!但你是对的!我尝试了“script”:“ceil(_score)”
和任何其他函数,但结果是一样的。
"script": "32"