Q:有两个人掉到陷阱里了,死的人叫死人,活人叫什么?

ES搜索排序时,取得字段舍去了小数部分这是为啥?

Elasticsearch | 作者 yz123 | 发布于2020年12月02日 | 阅读数:3272

这是我的排序语句
GET search/_search
{
"from": 0,
"size": 20,
"sort": [
{
"_score": {
"order": "desc"
}
},{
"doc_syn_score": {"order": "desc"}
}
]

}
说明:doc_syn_score字段是医生的综合分数,是double类型的;

搜索出的结果:
{
"_index" : "search",
"_type" : "_doc",
"_id" : "doc_8488",
"_score" : 40.0,
"_source" : {
...
"doc_syn_score" : 30.66,

},
"sort" : [
40.0,
30
]
}

说明,doc_syn_score的排序值竟然变成了30,怎么才能保留小数部分?
已邀请:

yz123 - 90后IT

赞同来自: laoyang360

问题找到了,是创建索引结构时把doc_syn_score的类型设置成了long类型了;
ES的long类型默认接收double和float的值,查询时也展示带小数的值,但是参与计算时会强转成long类型,舍去小数部分,所以设置索引结构时要小心;
还有ES社区建议用short、integer、float这些占空间小的类型,也能加快计算速度!
匿名用户

匿名用户

赞同来自:

开发人员在创建结构时把doc_syn_score的类型设置成了long类型,ES默认整形可以接受double、float的类型,查询时可以得到带小数的结果,但是es参与运算时会强制转换成整形,舍去小数部分,所以计算时会出现没有小数的值;

要回复问题请先登录注册