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

 更新时间:2022年11月18日 15:46:23   作者:每天都要进步一点点  
这篇文章主要介绍了Elasticsearch常见字段映射类型之scaled_float解读。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、概述

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

  • long 
  • integer
  • short
  • byte
  • double
  • float
  • half_float
  • scaled_float

如下表:

官方文档地址: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)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot实战教程之新手入门篇

    SpringBoot实战教程之新手入门篇

    Spring Boot使我们更容易去创建基于Spring的独立和产品级的可以"即时运行"的应用和服务,下面这篇文章主要给大家介绍了关于SpringBoot实战教程之入门篇的相关资料,需要的朋友可以参考下
    2022-03-03
  • mybatis-plus自动填充插入更新时间有8小时时差

    mybatis-plus自动填充插入更新时间有8小时时差

    本文主要介绍了mybatis-plus自动填充插入更新时间有8小时时差,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 如何安装jdk及安装MyEclipse的图文教程

    如何安装jdk及安装MyEclipse的图文教程

    这篇文章主要介绍了如何安装jdk及安装MyEclipse的图文教程,需要的朋友可以参考下
    2018-03-03
  • 由浅到深带你详谈Java实现数组扩容的三种方式

    由浅到深带你详谈Java实现数组扩容的三种方式

    这篇文章主要详细介绍了Java实现数组扩容的三种方式,新建一个数组,把原来数组的内容搬到新数组中,使用system.arraycopy(),使用java.util.Arrays.copyOf()这三种方式,具有一定的参考价值,需要的朋友可以借鉴一下
    2023-06-06
  • Java 数据结构与算法系列精讲之贪心算法

    Java 数据结构与算法系列精讲之贪心算法

    我们可能在好多地方都会听到贪心算法这一概念,并且它的算法思想也比较简单就是说算法只保证局部最优,进而达到全局最优。但我们实际编程的过程中用的并不是很多,究其原因可能是贪心算法使用的条件比较苛刻,所要解决的问题必须满足贪心选择性质
    2022-02-02
  • Java的几种文件拷贝方式示例详解

    Java的几种文件拷贝方式示例详解

    在Java编程中文件操作是常见且重要的任务之一,其中文件拷贝是一种基本操作,这篇文章主要给大家介绍了关于Java几种文件拷贝方式的相关资料,文中给出了详细的代码示例,需要的朋友可以参考下
    2024-08-08
  • Java IO流之字符缓冲流实例详解

    Java IO流之字符缓冲流实例详解

    这篇文章主要介绍了Java IO流之字符缓冲流,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Java网络编程中的TCP/UDP详解

    Java网络编程中的TCP/UDP详解

    这篇文章主要介绍了Java网络编程中的TCP/UDP详解,网络编程是指编写运行在多个设备的程序,这些设备都通过网络连接起来,java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节,需要的朋友可以参考下
    2023-12-12
  • java 设计模式从风控链理解责任链模式

    java 设计模式从风控链理解责任链模式

    这篇文章主要为大家介绍了java 设计模式从风控链理解责任链模式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • JavaFX实现简易时钟效果(一)

    JavaFX实现简易时钟效果(一)

    这篇文章主要为大家详细介绍了JavaFX实现简易时钟效果的第一篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论