ELK--- Elastic Stack定制动态映射

动态映射

ES中提供了一种叫做映射的机制,可以自动或手动为index中的文档建立一种数据结构和相关配置。

在自动建立映射的时候,我们可以通过创建映射的模版或更改设置,以达到我们想要的结果。

定制动态映射策略

dynamic 字段

ES中dynamic提供了三个参数:

  • true:遇到陌生字段进行动态映射。
  • false:新检测到的字段将被忽略。这些字段将不会被索引,因此将无法搜索,但仍将出现在返回的源字段中。意思就是说返回的字段里有,但是搜索的话无法搜索到。
  • strict:遇到陌生字段进行报错。

例如:

PUT /my_index
{
    "mappings": {
    //true false strict
      "dynamic": "strict",
       "properties": {
        "title": {
          "type": "text"
        },
        "address": {
          "type": "object",
          "dynamic": "true"
			}
		} 
	}
}

日期探测(date_detection)

在ES中,自动映射会将像yyyy-MM-dd格式映射为date类型,在某些情况下,当我们把目标的text类型映射为date类型,之后会有很大的麻烦。

ES中有一种叫做日期探测的字段,关闭日期探测即可以避免此情况的发生。

PUT /my_index
{
    "mappings": {
    //false即关闭日期探测
      "date_detection": false,
       "properties": {
        "title": {
          "type": "text"
        },
        "address": {
          "type": "object",
          "dynamic": "true"
			}
		} 
	}
}

数字探测(numeric_detection)

虽然JSON支持本机浮点和整数数据类型,但某些应用程序或语言有时可能将数字呈现为字符串。通常正确的解决方案是显式地映射这些字段,可以启用数字检测(默认情况下禁用)来自动完成这些操作。

PUT my_index
{
  "mappings": {
  	//默认为false。true表示开启,即可识别字符串中为数字的字段
    "numeric_detection": true
	} 
}

自定义动态模版

模版例子:

PUT /my_index
{
    "mappings": {
    //dynamic_templates 动态模版字段 固定写法
     "dynamic_templates": [{
     	//策略名 自己定义
		"en": {
		//当字段以en结尾就会匹配到执行此策略
		"match": "*_en",
		//匹配的属性值是否为string类型
	    "match_mapping_type": "string",
	    "mapping": {
	    //当满足以上类型:字段en结尾 是string类型 会映射成以下定义类型
	    // 定义为text类型
	    "type": "text",
	    //分词器为英文分词器
	    "analyzer": "english"
    	 }
 	   }
 	 },
 	 //long类型映射策略
 	 "long_match": {
 	 //匹配的属性值是否为long类型
          "match_mapping_type": "long",
          //映射为integer类型
          "mapping": {
            "type": "long"
          }
 	]
 }	
}	

参数:

  • match
    "match": "*_en":以en结尾的都会被匹配到。
  • unmatch
    "unmatch": "en_*":以en开头的都不会被匹配到。
  • match_mapping_type
    "match_mapping_type": "string":匹配到的类型是否为string类型。
  • path_match
    "path_match": "com.*":以com开头的路径形式的字段都会被匹配到。
  • path_unmatch
    "path_unmatch": "*.cn":以cn结尾的路径形式的字段都不会被匹配到。
  • match_pattern

使用正则的格式进行匹配:

 "match_pattern": "regex", 
 "match": "^profit_\d+$"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值