Elasticsearch의 동적 정책

4243 단어 Elasticsearch

1. 맞춤형 동적 정책


true: 낯선 필드를 만나면dynamic mappingfalse: 낯선 필드를 만나면strict: 낯선 필드를 만나면 오류를 보고합니다
PUT /my_index
{
  "mappings": {
    "my_type": {
      "dynamic": "strict",            // strict, 
      "properties": {
        "title": {
          "type": "text"
        },
        "address": {
          "type": "object",
          "dynamic": "true"           // true 
        }
      }
    }
  }
}

PUT /my_index/my_type/1
{
  "title": "my article",
  "content": "this is my article",        // 
  "address": {
    "province": "guangdong",
    "city": "guangzhou"
  }
}

// 
{
  "error": {
    "root_cause": [
      {
        "type": "strict_dynamic_mapping_exception",
        "reason": "mapping set to strict, dynamic introduction of [content] within [my_type] is not allowed"
      }
    ],
    "type": "strict_dynamic_mapping_exception",
    "reason": "mapping set to strict, dynamic introduction of [content] within [my_type] is not allowed"
  },
  "status": 400
}


PUT /my_index/my_type/1
{
  "title": "my article",
  "address": {
    "province": "guangdong",
    "city": "guangzhou"        // 
  }
}

// 
GET /my_index/_mapping/my_type

{
  "my_index": {
    "mappings": {
      "my_type": {
        "dynamic": "strict",
        "properties": {
          "address": {
            "dynamic": "true",
            "properties": {
              "city": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "province": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }
            }
          },
          "title": {
            "type": "text"
          }
        }
      }
    }
  }
}

2. 맞춤형 동적 매핑 정책


(1)date_detection
기본값은 일정한 형식에 따라date를 식별합니다. 예를 들어yyy-MM-dd입니다.그러나 만약에 어떤 필드가 2017-01-01의 값을 먼저 오면 자동dynamicmapping에 의해 date가 되고, 뒤에 "helloworld"같은 값이 하나 더 오면 오류가 발생합니다.어떤 type의 date_를 수동으로 닫을 수 있습니다detection, 필요하면 필드를date 형식으로 수동으로 지정합니다.
PUT /my_index/_mapping/my_type
{
    "date_detection": false
}

(2) 자신의dynamic mapping template(type level) 맞춤 제작
PUT /my_index
{
    "mappings": {
        "my_type": {
            "dynamic_templates": [
                { "en": {
                      "match":              "*_en", 
                      "match_mapping_type": "string",
                      "mapping": {
                          "type":           "string",
                          "analyzer":       "english"
                      }
                }}
            ]
}}}

PUT /my_index/my_type/1
{
  "title": "this is my first article"
}

PUT /my_index/my_type/2
{
  "title_en": "this is my first article"
}

title은 어떤dynamic 템플릿과 일치하지 않습니다. 기본적으로standard 분사기입니다. 사용하지 않는 단어를 필터하지 않습니다. is는 역렬 인덱스에 들어갑니다. is로 검색할 수 있는 title_en은dynamic 템플릿에 일치합니다. 바로english분사기입니다. 정지어를 필터합니다. is라는 정지어는 필터됩니다. is로 검색하면 검색할 수 없습니다.
(3) 자신의 default mapping template(index level) 사용자 정의
PUT /my_index
{
    "mappings": {
        "_default_": {
            "_all": { "enabled":  false }
        },
        "blog": {
            "_all": { "enabled":  true  }
        }
    }
}

좋은 웹페이지 즐겨찾기