Elasticsearch dynamic mapping 동적 템플릿 Default mapping 기본 열

7318 단어 elasticsearch
공식 문서 참조:
Dynamic field mappingedit
Default mapping
Custom dynamic mapping

문제


우리는 라벨이 하나 있기 때문에 이 라벨은 매우 많을 뿐만 아니라, 모두 사용자 자신의 라벨이며, 각양각색의 내용이 있을 것이다.동적 맵 열을 사용하면 처음에는 숫자 형식일 수도 있고, 나중에 다른 문자가 들어오면 모두 변환할 수 없는 오류일 수도 있습니다.

해결하다


elasticsearch는 동적 맵의 형식을 설정할 수 있는 기본 설정을 제공합니다.간단하게 말하면 새로 추가된 열의 이름과 일치하고, 일치하면 설정된 형식을 사용합니다.

json 형식

PUT /my_index
{
    "mappings": {
        "my_type": {
            "dynamic_templates": [
                { "es": {
                      "match":              "*_es", 
                      "match_mapping_type": "string",
                      "mapping": { "type": "string", "analyzer": "spanish" } }},
                { "en": {
                      "match":              "*", 
                      "match_mapping_type": "string",
                      "mapping": { "type": "string", "analyzer": "english" } }}
            ]
}}}
PUT _template/logging
{
  "template":   "logs-*", 
  "settings": { "number_of_shards": 1 }, 
  "mappings": {
    "_default_": {
      "_all": { 
        "enabled": false
      },
      "dynamic_templates": [
        {
          "strings": { 
            "match_mapping_type": "string",
            "mapping": { "type": "string", "fields": { "raw": { "type": "string", "index": "not_analyzed", "ignore_above": 256 } } } }
        }
      ]
    }
  }
}

PUT logs-2015.10.01/event/1
{ "message": "error:16" }

상기 두 단락의 내용은 공식 문서에서 나온 것이다.이곳의 필드 이름은 이미 매우 명백해서 나는 설명하지 않겠다.

java 형식

XContentBuilder builder = XContentFactory.jsonBuilder()
                    .startObject()
                    .startObject(typeName)

                    .startArray("dynamic_templates")
                    .startObject()
                    .startObject("all_tag_string")
                    .field("match", "tag_*")
//                    .field("match_mapping_type","string")
                    .field("match_mapping_type", "*")
                    .startObject("mapping")
                    .field("type", "string")
                    .endObject()
                    .endObject()
                    .endObject()
                    .endArray()


                    .field("dynamic_date_formats", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd")
                    .startObject("properties")
                    .startObject("customer_list")
                    .field("type", "nested")
                    .endObject()
                    .startObject("goods_list")
                    .field("type", "nested")
                    .endObject()
                    .endObject()
                    .endObject().endObject();

이 코드는 기본 시간 형식을 우리가 자주 사용하는 형식으로 설정하고 두 가지를 설정했다는 뜻이다.그리고 모든 열명은 tag_시작은 모두string 형식으로 설정합니다
//es 
IndicesExistsResponse// index 
TypesExistsResponse// type 
DeleteMappingRequest// mapping, index,type
PutMappingRequest// mapping, XContentBuilder 

좋은 웹페이지 즐겨찾기