elasticsearch映射的数据类型有哪些

如题所述

  Elasticsearch自带的数据类型是Lucene索引的依据,也是我们做手动映射调整的依据。
  映射中主要就是针对字段设置类型以及类型相关参数。
  

  1.JSON基础类型如下:
  

  字符串:string
  数字:byte、short、integer、long、float、double、
  时间:date
  布尔值: true、false
  数组: array
  对象: object
  
  2.Elasticsearch独有的类型:
  

  多重: multi
  经纬度: geo_point
  网络地址: ip
  堆叠/嵌套对象: nested object
  二进制: binary
  附件: attachment

  注意点:
  
  1.映射应当在建立索引时,同时建立。如果索引建立后,还想做在索引中增加其他类型的映射,是不可以的。elasticsearch 对没有做映射的类型,都已经指定默认映射。
  2.Elasticsearch映射虽然有idnex和type两层关系,但是实际索引时是以index为基础的。如果同一个index下不同type的字段出现mapping不一致的情况,虽然数据依然可以成功写入并生成各自的mapping,但实际上fielddata中的索引结果却依然是以index内第一个mapping类型来生成的。
  
  自定义字段映射
  
  Elasticsearch的Mapping提供了对Elasticsearch中索引字段名及其数据类型的定义,还可以对某些字段添加特殊属性:该字段是否分词,是否存储,使用什么样的分词器等。
  
  精确索引:
  
  字段都有几个基本的映射选项,类型(type)和索引方式(index)。以字符串类型为例,index有三个选项:
  analyzed:默认选项,以标准的全文索引方式,分析字符串,完成索引。
  not_analyzed:精确索引,不对字符串做分析,直接索引字段数据的精确内容。
  no:不索引该字段。

  对于日志文件来说,很多字段都是不需要再Elasticsearch里做分析这步的,所以,我们可以这样设置:
  "myfieldname" : {
  "type" : "string",
  "index" : "not_analyzed"
  }

  时间格式:
  
  @timestamp这个时间格式在Nginx中叫$time_iso8601,在Rsyslog中叫date-rfc3339,在Elasticsearch中叫dateOptionalTime.但事实上,Elasticsearch完全可以接受其他时间格式作为时间字段的内容。对于Elasticsearch来说,时间字段内容实际上就是转换成long类型作为内部存储的。所以,接受段的时间格式可以任意设置:
  @timestamp: {
  "type" : "date",
  "index" : "not_analyzed",
  "doc_values" : true,
  "format" : "dd/MM/YYYY:HH:mm:ss Z"
  }
  
  
  多重索引:
  
  多重索引是Logstash用户习惯的的一个映射,因为这是Logstash默认开启的配置:
  "title" : {
  "type" : "string",
  "fields" : {
  "raw" : {
  "type" : "string",
  "index" : "not_analyzed"
  }
  }
  }
  其作用时,在title字段数据写入的时候,Elasticsearch会自动生成两个字段,分别是title和title.raw。这样,有可能同时需要分词和不分词结果的环境,就可以很灵活的使用不同的索引字段了。比如,查看标题中最常用的单词,应该是使用title字段,查看阅读数最多的文章标题,应该是使用title.raw字段。
  
  多值字段:
  
  空字段:
  
  数组可以是空的。这等于有零个值。事实上,Lucene没法存放null值,所以一个null值的字段被认为是空字段。
  下面这四个字段将被识别为空字段而不被索引:
  "empty_string" : "",
  "null_value" : null,
  "empty_array" : [],
  "array_with_null_value" : [ null ]
温馨提示:答案为网友推荐,仅供参考
相似回答