elasticsearch小记之--sort的type

来源:互联网 发布:涂师傅数据恢复注册码 编辑:程序博客网 时间:2024/06/05 04:32

我们知道在数据库中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的判断事与愿违,所以这个时候我们就需要显示的指定类型了

0 0
原创粉丝点击