首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用节点客户端库在Elasticsearch中插入数字(浮点数)

问使用节点客户端库在Elasticsearch中插入数字(浮点数)
EN

Stack Overflow用户
提问于 2020-12-15 01:03:41
回答 3查看 120关注 0票数 0

我正在尝试将文档插入到Elasticsearch中,它们的格式如下:

代码语言:javascript
复制
  {
  total: 1,
  subtotal: 1.2,
  totalDiscount: 0}

我遇到的问题是零,在JavaScript中,你不能强制将'0‘表示为'0.0’或'0.00‘。

我不能在ES中的映射中使用文本,因为我想明显地对这些字段进行数学运算。因此,我对上面的所有内容都使用了一个“float”映射。

因此,对于这些字段中的每个字段,我都有如下内容:

代码语言:javascript
复制
"subtotal": {
   "type": "float"
   },

我尝试了所有不同的组合,将它们存储为'text‘不能让我随心所欲地查询它们,如果我没有定义映射,我会得到字段的'long’类型,这会截断它们,如果我使用float,我会得到一个异常mapper [totalDiscount] cannot be changed from type [float] to [long],如果我复杂地删除它们,那么跳过保存也会得到一个错误

Rejecting mapping update to [...] as the final mapping would have more than 1 type

任何帮助都非常感谢,谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-12-15 02:03:28

更新:

scaled_float对我来说不是很好,所以我最终采用了这种“条纹方式”。

也就是说,以美分表示所有的货币金额,安全,磁盘上的空间更少,不需要定义映射。

我还使用了这个https://currency.js.org/来确保乘法和输出不会受到JS中浮点数的“众所周知”问题的影响。

票数 1
EN

Stack Overflow用户

发布于 2020-12-15 01:22:12

由于这可能对阅读的人有用,我认为答案可能是使用这种映射:

代码语言:javascript
复制
"price": {
"type": "scaled_float",
"scaling_factor": 100
}

不仅磁盘效率更高,而且不会出现上述问题。

我会让这个线程保持更新,看看是否能正常工作。

票数 0
EN

Stack Overflow用户

发布于 2020-12-15 01:26:01

我不熟悉节点客户端库,但在elasticsearch中,错误表示-

代码语言:javascript
复制
mapper [totalDiscount] cannot be changed from type [float] to [long]

从上面的错误可以看出,似乎在创建索引时,totalDiscount字段是使用float字段数据类型定义的,而现在您正在将其更改为long数据类型。这是不可能的,这就是抛出上述错误的原因。

代码语言:javascript
复制
Rejecting mapping update to [...] as the final mapping would have more than 1 type

出现此错误的原因是,在7.0中的API中不推荐使用类型,并对索引创建、put映射、get映射、put模板、get模板和get字段映射API进行了破坏性更改。请参阅此处了解有关removal of mapping types的更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65293248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档