elasticsearch映射的数据类型有哪些?json类型与特有类型

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 ]

 

posted @ 2016-08-19 15:12 小天儿 阅读(...) 评论(...) 编辑 收藏