Elasticsearch는 기존 동적 템플릿을 기반으로 새 필드를 추가합니다.

6163 단어 Elasticsearch
개요
Elasticsearch 데이터베이스를 조작할 때 필드를 추가하는 문제를 기록합니다. 업무 수요로 인해 ES에 필드를 추가해야 합니다. 이 필드는 키워드 형식을 사용할 수 없습니다. 검색할 때 이 필드를 모호하게 조회해야 하기 때문에 ES의 원래 템플릿에 필드 설정 단어를 추가해야 합니다.
1. 분사 설정
ES는 기본적으로 자신이 만든 색인에 대한 설정과 수정을 하지 않으면 표준에 따라 단어를 구분합니다.
내 업무에 필요한 필드는 쉼표로 구분된 문자열이기 때문에 쉼표로 구분된 분사기만 설정하면 된다.
나는 원래 동적 템플릿을 사용했기 때문에, 원래의 텍스트를 키워드로 바꾸었다
#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"   
		}
      }
    }
  }
}

이 때 데이터에 접근하면 새로 추가된 필드는 설정된 형식에 따라 데이터를 생성합니다
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기