Elasticsearch 基于原有动态模板新增字段

概述

记录一次自己在操作Elasticsearch数据库新增一个字段出现的问题,由于业务需求,我们需要往ES中新增了一个字段,该字段不能使用keyword类型,因为查询的时候需要对该字段进行模糊查询,这就要求我们在ES原来的模板中新增一个字段设置分词。

1、设置分词

ES自带了一些分词器,即在默认情况下,如果不对自己创建的索引做任何的设置和修改,ES会按照standard进行分词

我业务中需要的的字段是按照逗号隔开的字符串,所以我只需要设置一个按照逗号分割的分词器就可以。

由于我原来使用了动态模板,把原来的text转化为keyword

#ES模板
PUT /_template/template_access_log
{ 
  "template": "poc*",
  "settings": {
    "index": {
      "refresh_interval": "10s",
      "number_of_shards" : "5",
      "number_of_replicas" : "1",
      "translog": {
        "flush_threshold_size": "1gb",
        "sync_interval": "30s",
        "durability": "async"
      }
    }
  },                               
 	"mappings": {              
 		"doc": {           
			"dynamic_templates": [                          
				  {                                               
					 "string_as_keyword": {                   
							"match_mapping_type": "string", 
							"mapping": {                      
							  "type": "keyword"             
							}                                   
						}                                       
					}                                           
				],                                              
 			"properties": {     
				 "TRANSAMOUNT": {       
				 	"type": "double"   
				 },
				 "consumeTime": {       
				 	"type": "integer"   
				 },
				 "transTime": {       
				 	"type": "date",   
				 	"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" 
				 }
 			}  
 		}      
 	},
 	"aliases" : {
      "poc" : {}
  }
}

此时我们需要给setting新增一个分词设置和字段字段

#ES模板
PUT /_template/template_access_log
{ 
  "template": "poc*",
  "settings": {
    "index": {
      "refresh_interval": "10s",
      "number_of_shards" : "5",
      "number_of_replicas" : "1",
      "translog": {
        "flush_threshold_size": "1gb",
        "sync_interval": "30s",
        "durability": "async"
      }
    },
	"analysis": {
          "analyzer": {
              "comma": {
                   "type": "pattern",
                   "pattern":","
                  }
              }
      }
  },                               
 	"mappings": {              
 		"doc": {           
			"dynamic_templates": [                          
				  {                                               
					 "string_as_keyword": {                   
							"match_mapping_type": "string", 
							"mapping": {                      
							  "type": "keyword"             
							}                                   
						}                                       
					}                                           
				],                                              
 			"properties": {     
				 "TRANSAMOUNT": {       
				 	"type": "double"   
				 },
				 "consumeTime": {       
				 	"type": "integer"   
				 },
				 "transTime": {       
				 	"type": "date",   
				 	"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" 
				 },
				 "OPENGROUPPATH": {       
				 	"type": "text",
					"analyzer": "comma",
					"search_analyzer": "comma"   
				 }
 			}  
 		}      
 	},
 	"aliases" : {
      "poc" : {}
  }
}

上面的模板中我们新增一个analysis分词器和一个OPENGROUPPATH字段,完成以后更新模板。

--------------------------------------------------------------------------------------------------------------------------------------------

上述步骤是不是很完美???

no

该过程忽略了一步,我们在创建完动态模板以后,由于数据源源不断的往ES写入数据,此时在ES索引库中已经存在以POC开头的索引库,如果直接接入新增的字段数据,该字段不会在当前已经存在的poc库中按照我们上面设置的模板创建数据。

wtf???

ES动态模板库仅仅针对没有接入数据,没有生成索引库之前才生效。

由于我ES的业务数据库设置的是按月存储数据,生成的数据按照poc201909这样子的格式生成数据库,此时我们还需要设置一下poc201909该索引库的setting结构和字段,

#设置es索引结构
PUT /poc201909
{
  "settings": {
    "index": {
      "refresh_interval": "1s", 
      "translog": {
        "flush_threshold_size": "1gb", 
        "sync_interval": "30s", 
        "durability": "async"
      }
    },
	"analysis": {
          "analyzer": {
              "comma": {
                   "type": "pattern",
                   "pattern":","
                  }
              }
      }
  }, 
  "mappings": {
    "resultdata": {
      "dynamic_templates": [
        {
          "string_as_keyword": {
            "match_mapping_type": "string", 
            "mapping": {
              "type": "keyword"
            }
          }
        }
      ], 
      "properties": {
        "TRAMSAMOUNT": {
          "type": "double"
        }, 
        "MONEY": {
          "type": "float"
        }, 
        "transTime": {
          "type": "date", 
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
        },
		"OPENGROUPPATH": {       
		  "type": "text",
		  "analyzer": "comma",
		  "search_analyzer": "comma"   
		}
      }
    }
  }
}

此时接入数据,新增的字段就会按照设置的格式生成数据

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值