您的位置:首页 > 其它

elasticsearch小记之--sort的type

2016-03-06 02:52 501 查看
我们知道在数据库中sort一个字符串和一个数字,会得到不同的结果,例如下面一组数字,他们的类型是string

1,3,5,33,24,6

上面的数字如果用倒序的话,结果会是 6,5,33,3,24,1 。大家发现没有,如果是string 类型,他是不会按照数字类型中的大小进行排序的,他是按照首先比较第一个字符的大小,然后比较第二个字符的大小,依次下来的,所以就得到了上面的结果。那如果是数字类型呢?那结果我想大家应该都知道,是 1,3,5,6,24,33 。会按照自然数的顺序。

那么在进入正题,在elasticsearch 里面sort其实也是这样的,我们来看看下面的例子

{

“your_index” : {

“mappings” : {

“your_type” : {

“properties” : {

“popRank” : {

“type” : “string”

}

}

}

}

}

}

curl -XPOST localhost:9200/test/test/_bulk -d ’

{“index”: {“_id”: 1}}

{“popRank”: 123}

{“index”: {“_id”: 2}}

{“popRank”: -157}

{“index”: {“_id”: 3}}

{“popRank”: 1234}

{“index”: {“_id”: 4}}

{“popRank”: 0}

{“index”: {“_id”: 5}}

{“popRank”: -310}

{“index”: {“_id”: 6}}

{“popRank”: 332}

{“index”: {“_id”: 7}}

{“popRank”: -10}

对上面进行倒序排序,结果会是

332, -310, -157, 1234, 123, -10, 0

他是按照字符串的排序方式进行的,那么如果你想按照自然数的顺序,如何做呢,我们就需要在定义mapping的时候,将他的类型定义成为数字类型,如下

{

“your_index” : {

“mappings” : {

“your_type” : {

“properties” : {

“popRank” : {

“type” : “float” <—- “float” MUST appear here and NOT “string”

}

}

}

}

}

}

那么这样的结果就是

1234, 332, 123, 0, -10, -157, -310

为什么讲这个呢,因为当你在开发的时候,mapping的type是可以不用指定的,elasticsearch会自动判断,是哪一种类型,但是难免elasticsearch的判断事与愿违,所以这个时候我们就需要显示的指定类型了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: