Logstash导入数据到Elasticsearch时自定义mapping

本文深入讲解Elasticsearch模板,包括静态模板与动态模板的应用场景、优缺点,以及如何通过logstash自定义模板,提前设置索引映射,实现MySQL数据同步至Elasticsearch。探讨字段类型、分词、索引策略等关键要素。

template概念

使用logstash导入数据到ES中由于索引按天拆分,手动创建mapping非常麻烦,ES内部维护了template,template定义好了mapping,如果索引的名称被template匹配到,那么该索引的mapping就按照template中定义的mapping自动创建。而且template中定义了索引的主分片和副分片的数量,分词等属性。

每个模板都有一个名字用于描述这个模板的用途,模板的级别使用order来管理,配合,一个 mapping 字段用于指明这个映射怎么使用,和至少一个参数(例如 match)来定义这个模板适用于哪个字段。

在elasticsearch中,如果你有一类相似的数据字段(我用logstash解析字段的时候,没有指定类型,所以解析出来的字段都是string类型,这些字段也不需要分词),想要统一设置其映射,就可以用到一项功能:动态模板映射(dynamic_templates)。

启动logstash系统会使用一个默认的动态映射模板,模板名字为logstash,使用_template查看。

在启动logstash过程中你会看到如下信息

你看第一行path=>nil表示没有找到自定义模板,那就使用默认模板,并且最后将模板存储在elasticsearch模板路径中,以logstash命名。模板内容:

参数:

  match_mapping_type允许你只对特定类型的字段使用模板,正如标准动态映射规则那样,比如string,long等。

  match(unmatch相反)参数只会匹配字段名,如"*_es",如果为"*",就是所有字段(同时是match_papping_type类型)都会匹配到

  path_match(path_unmatch相反)参数用于匹配对象中字段的完整路径,比如address.*.name可以匹配如下字段:

{
	"logstash": {
		"order": 0,
		"template": "logstash-*",
		"settings": {
			"index": {
				"refresh_interval": "5s"
			}
		},
		"mappings": {
			"_default_": {    # 文档类型
				"dynamic_templates":   # 关键词,固定的
             [ # 必须是中括号
                {   
					"message_field":    #模板名     
                     {   
						"mapping": {
							"fielddata": {
								"format": "disabled"
							},
							"index": "analyzed",   #是否分词,该demo是2.4.0的es,和6.5.4有一点点不太一样
							"omit_norms": true,
							"type": "string"   # 转换成的类型
						},
						"match_mapping_type": "string",    #匹配类型            
						"match": "message"    #匹配规则         
					}
				}, {
					"string_fields": {
						"mapping": {
							"fielddata": {
								"format": "disabled"
							},
							"index": "analyzed",
							"omit_norms": true,
							"type": "string",
							"fields": {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值