使用lang groovy在elastic 1.3中,脚本_得分返回0

使用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

我是新来的。我正在使用函数_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(我使用的任何函数,如
“脚本”:“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"