文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Elasticsearch常见字段映射类型之scaled_float解读

2022-11-21 22:51

关注

一、概述

ES中支持的常见的数字类型有

如下表:

官方文档地址:Numeric field types | Elasticsearch Guide [8.2] | Elastic

今天我们主要总结一下scaled_float这种数字类型。

scaled_float:带有缩放因子的缩放类型浮点数。需配合缩放因子scaling_factor一起使用。

什么时候使用scaled_float类型呢?

有时候,我们需要存储浮点类型的数据,比如价格等,单位为元。这时候其实推荐价格使用scaled_float类型,然后我们将比例因子(scaling_factor)设置为100,这样我们的价格在ES中就会以“分”进行存储。

例如:

假设缩放因子scale_factor为100,这样scaled_float字段将在ES内部存储10.25(元)为1025(分)。存储10.2588(元)为1026(分)。

scaled_float类型注意事项

必须指定缩放因子scaling_factor。ES索引时,原始值会乘以该缩放因子并四舍五入得到新值,ES内部储存的是这个新值,但返回结果仍是原始值。使用比例因子的好处是整型比浮点型更易压缩,节省磁盘空间。

注意: scaling_factor属性是只针对scaled_float这个数据类型才有,不要在其他类型上使用此属性。

二、实践

接下来,我们通过一个简单的示例来演示scaled_float类型的字段的使用。

(1)、创建包含类型为scaled_float的字段

totalAmount(总价格)的索引order,并指定scaling_factor(缩放因子)为100

PUT order
{
  "mappings": {
    "properties": {
      "totalAmount": {
        "type": "scaled_float",
        "scaling_factor": 100
      }
    }
  }
}

(2)、存储第一个值

PUT order/_doc/1
{
  "totalAmount": 13.3225
}

实际上,ES内部存储的是:

13.3225 * 100(缩放因子) = 1332.25,然后四舍五入得到1332,所以内部真正存储的是1332。

(3)、存储第二个值

PUT order/_doc/2
{
  "totalAmount": 13.3277
}

实际上,ES内部存储的是:

13.3277 * 100(缩放因子) = 1332.77,然后四舍五入得到1333,所以内部真正存储的是1333。

(4)、基于totalAmount条件进行查询匹配

GET order/_search
{
  "query": {
    "match": {
      "totalAmount": 13.3245
    }
  }
}

查询结果:

"hits" : [
      {
        "_index" : "order",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "totalAmount" : 13.3225
        }
      }
    ]

通过查询结果可以看到,通过13.3245查询出了ID为1的文档,实际上ES是将查询条件:13.3245 * 100(缩放因子) = 1332.45,然后四舍五入之后到最近的长值得到1332,这样就能匹配到ID为1的文档。

需要注意的是,虽然ES在内部做了缩放处理,但是查询返回值还是原始值(13.3225)。

GET order/_search
{
  "query": {
    "match": {
      "totalAmount": 13.3267
    }
  }
}

查询结果:

"hits" : [
      {
        "_index" : "order",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "totalAmount" : 13.3277
        }
      }
    ]

通过查询结果可以看到,通过13.3267查询出了ID为2的文档,实际上ES是将查询条件:13.3267 * 100(缩放因子) = 1332.67,然后四舍五入之后到最近的长值得到1333,这样就能匹配到ID为2的文档。

需要注意的是,虽然ES在内部做了缩放处理,但是查询返回值还是原始值(13.3277)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯