我是弹性新手。我正在使用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(我使用的任何函数"script": "floor(_score)"
都返回0.0)。也:
"script": "doc['boost'].value"
返回0.0(doc ['boost']。值介于10,100之间)
我也尝试过:
"script": "32"
它返回32(正如我所料)。所以我猜这个问题很常见。也许当数字很大时,它们会变为0.0。我该怎么办? 感谢
答案 0 :(得分:2)
我找到了解决方案但不是问题!
如果我使用floor( _score*10.0 )
,它将返回正确的答案!(我不知道为什么)
和"script": "doc['boost'].value"
它将float转换为Integer(我还没解决浮动的问题)。