当前位置:   article > 正文

【ElasticSearch】(八)浅析elasticsearch常用数据类型_elasticsearch8所有数据类型

elasticsearch8所有数据类型

1.where?

      介绍elasticsearch的数据类型之前,首先需要了解es映射的概念。

      es的存储结构是“index.type.document”形式,而映射就是定义一个document所包含的字段是如何存储、索引的。

      即对于elascticsearch数据类型,是在定义索引映射时定义的。

 

2.what?

      https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html

      如上所述,官网介绍了elasticsearch的数据类型,整理如下:

    (备注:设计索引前,建议先浏览下所有数据类型,需要用到哪种再深入研究,我对api文档的使用方法)

      可见,es的数据类型很多,对于常用的数据类型,我归类为:

  1. 1.text/keyword
  2. 2.Numeric
  3. 3.Date
  4. 4.Boolean
  5. 除此4类,官网将“binary”和“range”也视为core datatype,感兴趣的朋友可以研究下。

       简介:

       1)text/keyword都可理解存储string类型,在2.x版本种,es是存在string类型的,进化过程中演变为了text和keyword。

       2)Numeric,存储的则为数值型数据,其中包含long, integer, short, byte, double, float, half_float, scaled_float共8种数值类型,也是够丰富的,mysql种的数值型数据,都可以映射到Numeric当中。

       3)Date,时间类型,可以通过预设的3种形式或者自定义的format来存储日期信息。

       4)Boolean,这个就不用说啦。

 

3.how?

      1)text / keyword

      对字符串类型,在es 2.x版本,用string类型来表示,到了6.x,演化为“text”和“keyword”.其中:

      1.“text”类型

      场景:用于索引全文值字段,例如电子邮件正文或产品说明。这些字段是被分词的。分析过程允许Elasticsearch在每个全文字段中搜索单个单词。文本字段不用于排序,很少用于聚合

      用法:

  1. PUT my_index
  2. {
  3. “mappings”:{
  4. “_doc”:{
  5. “properties”:{
  6. “email_context”: {
  7. "analyzer": "ik_max_word", //指定分词器
  8. type”:“text”
  9. }
  10. }
  11. }
  12. }
  13. }

      2."keyword"类型

      场景:

      用于索引结构化内容的字段,例如电子邮件地址,主机名,状态代码,邮政编码或标签。

      它们通常用于过滤(找到我的所有博客文章,其中 status为published),排序,和聚合。关键字字段只能按其确切值进行搜索。

      用法:

  1. PUT my_index
  2. {
  3. “mappings”:{
  4. “_doc”:{
  5. “properties”:{
  6. “tags”:{
  7. type”:“keyword”
  8. }
  9. }
  10. }
  11. }
  12. }

      

      2)Numeric

      Numeric类型中支持8种数据类型,其中:

long

带符号的64位整数,其最小值为,最大值为。 -263263-1

integer

带符号的32位整数,其最小值为,最大值为。 -231231-1

short

带符号的16位整数,其最小值为-32,768,最大值为32,767

byte

带符号的8位整数,其最小值为-128,最大值为127

double

双精度64位IEEE 754浮点数,限制为有限值。

float

单精度32位IEEE 754浮点数,限制为有限值。

half_float

半精度16位IEEE 754浮点数,限制为有限值。

scaled_float

由a支持的有限浮点数long,由固定double比例因子缩放。

       看着和java的数据类型占用字节数还是很像的。

       我的项目中, es的数据是从mysql同步过去的,我将mysql常用的数据类型和es数据类型做了如下映射:

         mysql  <---> elasticsearch

smallintinteger
bigintlong
int(11)integer
decimal(12,2)double
varchartext/keyword
datetime(3)date
double(5,2)double
timestampdate
tinyint(2)integer

      实战中如何选择数据类型?

      1.整数型(byte,short,integer和long):你应该选择足以让你的用例最小的类型。这将有助于索引和搜索更有效。

      2.浮点型:使用缩放因子将浮点数据存储到整数中通常更有效,这是该scaled_float 类型所做的。(这里使用scaling_factor为100作为缩放因子,还是不太理解,大神可以帮忙解释下不?)

 

      3)Date型

      JSON没有日期数据类型,因此Elasticsearch中的日期可以是:

      1.包含格式化日期的字符串,例如"2015-01-01"或"2015/01/01 12:10:30"。
      2.一个代表毫秒以来的长数字。
      3.表示自纪元以来秒数的整数。
      在内部,日期转换为UTC(如果指定了时区)并存储为表示自纪元以来毫秒的长数。日期查询在内部转换为此长表示的范围查询,聚合和存储字段的结果将转换回字符串,具体取决于与字段关联的日期格式。

       在我的项目里,日期格式定义为:

  1. PUT my_index {“
  2. mappings”: {“
  3. _ date”: {“
  4. properties”: {“
  5. date”: {“
  6. "format": "yyyy-MM-dd HH:mm:ss",
  7. "type": "date"
  8. }
  9. }
  10. }
  11. }
  12. }

       即存入es种的时间格式,为“yyyy-MM-dd HH:mm:ss”。

       同时,可以通过“||”分隔来定义多种日期类型,如下:

  1. PUT my_index {“
  2. mappings”: {“
  3. _ doc”: {“
  4. properties”: {“
  5. date”: {“
  6. type”:“ date”,“ format”:“ yyyy - MM - dd HH: mm: ss || yyyy - MM - dd || epoch_millis“
  7. }
  8. }
  9. }
  10. }
  11. }

      备注:日期将始终呈现为字符串,即使它们最初在JSON文档中作为long提供。

 

       4)Boolean 型

      布尔字段接受JSON true和false值,也可以接受被解释为true或false的字符串,如下:

true, “true”, false, "false"

       使用如下:

  1. 映射索引:
  2. PUT my_index {“
  3. mappings”: {“
  4. _ doc”: {“
  5. properties”: {“
  6. is_published”: {“
  7. type”:“ boolean
  8. }
  9. }
  10. }
  11. }
  12. }
  13. 获取字段:
  14. POST my_index / _doc / 1 { “is_published” :“true”}
  15. POST my_index / _doc / 1 { “is_published” :true}

 

     That's all. 19.01.27(周日)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/981326
推荐阅读
相关标签
  

闽ICP备14008679号