当前位置: 首页 > 面试题库 >

Elasticsearch,最大映射类型长度为long

周楷
2023-03-14
问题内容

我的映射:

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 7时 ,我获得了成功。但是,返回的JSON ES显示:

      "hits": [
         {
            "_index": "packtwo-order-sku-log",
            "_type": "baitu",
            "_id": "AVaMWcchVwJTsNV878q2",
            "_score": 2.7917593,
            "_source": {
               "order_id": 10160815114820888,
               ...
            }
         }

我搜索了10160815114820888->没有结果

我搜索了1016081511482088 7- >结果是1016081511482088 8

我在官方文档中找到了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。



 类似资料:
  • 问题内容: 我的映射: 当我搜寻 要么 我的点击数是0;但是,当我将order_id更改为1016081511482088 7时 ,我获得了成功。但是,返回的JSON ES显示: 我搜索了10160815114820888->没有结果 我搜索了1016081511482088 7- >结果是1016081511482088 8 我在官方文档中找到了long类型: 我的数据不超过2 ^ 63-1 那

  • 问题内容: 我正在创建一个用于发送私人消息的表单,并希望将textarea 的值设置为适合MySQL数据库表中字段的最大长度。类型文本字段可以存储多少个字符? 如果很多,我可以像使用varchar一样在数据库文本类型字段中指定长度吗? 问题答案: 请参阅参考资料以获取最大数量:http : //dev.mysql.com/doc/refman/5.0/en/storage- requirement

  • 问题内容: 当我尝试过时如何设置可以使用swift输入到UITextField中的最大字符数?,我看到如果我全部使用10个字符,我也无法删除该字符。 我唯一能做的就是取消该操作(一起删除所有字符)。 有谁知道如何不遮挡键盘(以便我不能添加其他字母/符号/数字,但可以使用退格键)? 问题答案: 对于Swift 5和iOS 12,请尝试以下协议实现方法的实现: 该代码最重要的部分是从()到()的转换。

  • 配置最大长度为数据存储提供了有关示意,示意其为给定属性使用合适的数据类型。最大长度仅被应用于数组数据类型,比如 string 和 byte[]。 注意 Entity Framework 在将数据传递给数据库提供程序之前不会做最大长度验证。是否合适是由数据库提供程序或数据储存验证的。比如,使用的是 SQL Server 时,超出最大长度将由于底层数据列的数据类型不允许数据超出而导致异常。 惯例 按照

  • 类型映射 web3j中使用的原生Java到ABI类型映射如下: boolean -> bool BigInteger -> uint/int byte[] -> bytes String -> string and address types List<> -> dynamic/static array BigInteger类型必须用于数字类型,因为Ethereum以太坊中的数字类型是256位整数

  • 问题内容: 我在ES 1.3.4和JDBC For MySql 1.3.4.4的本地实例上拥有River 这条河工作得很好,并在ES中导入数据。我遇到的问题是我的一个字段是文本字段,并且其中包含空格。例如“实时计算器”。ES将其索引为“实时”,“时间”和“计算器”,而不是“实时计算器”。 所以我正在使用下面提到的JSON创建映射: 和命令: 但是我得到以下提到的错误: 当我尝试使用下面提到的命令查