我正在实施一个项目,其中结果将根据得分进行排序,如果得分相同,则结果集将根据日期字段进行排序。 当分数相差.00001,即第5或第6个小数位时,就会出现问题。有没有什么方法可以将Elasticsearch中得出的分数四舍五入到第4位小数,这样二级排序就可以对它起作用。 如果不是可以实现的任何解决方法。
由于 Ashit
答案 0 :(得分:2)
这是一个可行的解决方案,使用script score来舍入实际分数
GET /post/_search
{
"query": {
"function_score": {
"query": {
"match": {"title": "example"}
},
"script_score" : {
"script" : {
"source": "Math.round(_score)"
}
}
}
},
"sort": [
"_score",
{"postdate": "desc"}
]
}
在此搜索示例中,我们首先对舍入的_score进行排序,然后对post.postdate进行降序排序。
答案 1 :(得分:0)
我遇到了同样的问题,我想将分数四舍五入,首先按分数排序,然后按其他顺序排序。 我也使用了 Mad 的答案,带有 function_score,但在昏迷后我仍然有分数。
根据documentation,我修改了boost_mode以获得一个整数:
GET /_search
{
"query": {
"function_score": {
"query": { "match_all": {} },
"boost_mode": "replace",
"script_score" : {
"script" : {
"source": "Math.round(_score)"
}
}
}
},
"sort": [
"_score",
{"postdate": "desc"}
]
}
使用这个 boost_mode 帮助我得到整数作为分数。