当在elasticsearch (version "1.1.2")中使用query按整数字段排序时:
{
"query": {
"match_all": {}
},
"sort": [
{
"cubicCapacity": {
"order": "asc",
"ignore_unmapped": true
}
}
],
"from": 0,
"size": 150
}
结果是正确的,文档按自然顺序排序(1,2,5,10)
但是当尝试使用"desc"完成相同的查询时:
{
"query": {
"match_all": {}
},
"sort": [
{
"cubicCapacity": {
"order": "desc",
"ignore_unmapped": true
}
}
],
"from": 0,
"size": 150
}
结果不正确,文档以某种奇怪的方式排序,但预期为(10,5,2,1)。
那么为什么用"desc"
排序不能给出一个自然顺序的正确结果呢?
注:当按asc/desc排序但使用字符串类型(1,10,2,5)时,"desc"
可以正确工作(5,2,10,1)
你应该给你的数字加上前导零,所以你会得到[0001,0010,0002,0005]而不是[1,10,2,5]。你要加的前导零的数量将取决于你认为你将拥有的最大值。例如,如果你认为它将低于100亿,那么你应该存储0000000005(9个零)而不是5,0000000010(8个零)而不是10