Elasticsearch,最大映射类型为long

我的映射:

POST /packtwo-order-sku-log

{

"settings": {

"number_of_shards": 5,

"number_of_replicas": 1

},

"mappings": {

"baitu": {

"properties": {

"order_id":{

"type": "long"

},

....

}

}

}

}

当我搜寻

"query": {"term" : {"order_id" : 10160815114820888}}

要么

"query": {"match" : {"order_id" : 10160815114820888}}

我的点击数是0;但是,当我将order_id更改为1016081511482088 ,我获得了成功。但是,返回的JSON ES显示:

      "hits": [

{

"_index": "packtwo-order-sku-log",

"_type": "baitu",

"_id": "AVaMWcchVwJTsNV878q2",

"_score": 2.7917593,

"_source": {

"order_id": 10160815114820888,

...

}

}

我搜索了10160815114820888->没有结果

我搜索了1016081511482088 >结果是1016081511482088

我在官方文档中找到了long类型:

long

A signed 64-bit integer with a minimum value of -2^63 and a maximum value of 2^63-1

我的数据不超过2 ^ 63-1

那我怎么了

回答:

这是由于IEEE-754双精度浮点值的舍入问题)。

可以安全地表示直到53位的整个值,但是10160815114820887的长度为54位(1001000001100100110110101000111111000100011000001110100010111)

您所索引的实际数字确实是10160815114820887,但是由于上述四舍五入问题,已对其进行索引并显示为10160815114820888

您可以在浏览器的Javascript控制台中尝试以下操作:

> var num = 10160815114820887;      <--- assign value

< undefined

> num <--- display value

< 10160815114820888

您还可以在ES中尝试快速测试:

# create doc with 10160815114820887

POST test/test/1

{ "number": 10160815114820887 }

# get doc 1

GET test/test/1

# result

{ "number": 10160815114820888 }

如您所见,您已编入索引(10160815114820887)的数字显示为10160815114820888,并且可以找到为10160815114820887,因为它在搜索时也会四舍五入为10160815114820888。

以上是 Elasticsearch,最大映射类型为long 的全部内容, 来源链接: utcz.com/qa/435902.html

回到顶部