Elasticsearch 7.10의 매핑

4786 단어 elasticsearch
매핑은 문서와 포함된 필드의 저장 및 색인 방식을 정의하는 과정입니다.예를 들어, 매핑 정의를 사용합니다.
  • 전체 텍스트 필드로 간주해야 하는 문자열 필드
  • 숫자, 날짜 또는 지리적 위치
  • 를 포함하는 필드
  • 날짜 값의 형식
  • 동적 추가 필드의 매핑을 제어하는 사용자 정의 규칙
  • 매핑 정의는 다음과 같습니다.
    Metadata fields: 메타데이터 필드는 문서의 관련 메타데이터를 사용자 정의하는 데 사용됩니다.메타데이터 필드의 예제에는 문서의_index ,_id 및_소스 필드.
    Fields: 문서와 관련된 필드나 속성을 포함하는 목록을 매핑합니다.각 필드에는 고유한 데이터 유형이 있습니다.

    Settings to prevent mappings explosion


    색인에 너무 많은 필드를 정의하면 맵이 폭발하여 메모리 부족 오류와 복구가 어려울 수 있습니다.
    삽입된 모든 새 문서에 동적 맵과 같은 새로운 필드가 도입되는 상황을 고려합니다.모든 새 필드가 색인 맵에 추가됩니다. 맵이 증가함에 따라 문제가 될 수 있습니다.
    다음 설정을 사용하여 (수동 또는 동적으로 작성된) 필드 매핑의 수를 제한하고 문서에서 매핑이 폭발하지 않도록 합니다.
    index.mapping.total_fields.limit: 인덱스의 최대 필드 수입니다.필드와 객체의 매핑, 필드 별칭이 모두 이 제한에 포함됩니다.기본값은 1000입니다.
    이 제한은 맵과 검색이 너무 커지는 것을 방지합니다.비교적 높은 값은 성능 저하와 메모리 문제를 초래할 수 있으며, 특히 부하가 비교적 높거나 자원이 적은 그룹에서 집중될 수 있다.
    이 설정을 추가하면 index를 추가하는 것을 권장합니다.query.bool.max_clause_count 설정, 이 설정은 조회에서 부울 자구의 최대 수량을 제한합니다.
    TIP: 필드 매핑에 많은 키가 포함되어 있는 경우 편평한 데이터 유형을 고려하십시오.
    index.mapping.depth.limit: 필드의 최대 깊이를 내부 대상의 수량으로 측정합니다.예를 들어, 모든 필드가 루트 객체 수준에서 정의된 경우 깊이는 1입니다.객체가 매핑된 경우 깊이는 2로 추정됩니다.기본값은 20입니다.
    index.mapping.nested_fields.limit: 인덱스에서 가장 큰 다른 플러그인 맵 수입니다.중첩 형식은 특수한 상황에서만 사용되며, 서로 독립적으로 대상의 그룹을 조회해야 할 때.이 설정은 설계 불량의 매핑을 방지하기 위해 색인마다 유일하게 끼워 넣는 형식의 수량을 제한합니다.기본값은 50입니다.
    index.mapping.nested_objects.limit: 하나의 문서가 모든 중첩 유형에 포함할 수 있는 중첩 JSON 객체의 최대 수입니다.문서에 중첩된 객체가 너무 많으면 메모리 부족 오류를 방지하는 데 도움이 됩니다.기본값은 10000입니다.
    index.mapping.field_name_length.limit: 필드 이름의 최대 길이를 설정합니다.이 설정은 실제로 맵 폭발 문제를 해결할 수 없지만, 필드의 길이를 제한하려면 이 설정이 여전히 유용할 수 있습니다.일반적으로 이 설정을 설정할 필요가 없습니다.사용자가 이름이 매우 긴 대량의 필드를 추가하기 시작하지 않으면 기본 설정은 가능합니다.기본값은 Long입니다.MAX_VALUE(무제한).

    Dynamic mapping


    필드와 맵 유형은 사용하기 전에 정의할 필요가 없습니다.동적 매핑을 통해 색인 문서만으로 새 필드 이름을 자동으로 추가할 수 있습니다.새 필드는 톱 레벨 매핑 유형에 추가할 수도 있고 내부 객체 및 중첩 필드에 추가할 수도 있습니다.
    동적 맵 규칙을 새 필드에 대한 사용자 정의 맵으로 구성할 수 있습니다.

    Explicit mappings


    데이터에 대한 이해가 Elasticsearch의 추측을 초과했기 때문에 동적 맵은 입문에 매우 유용하지만, 때로는 자신의 현식 맵을 지정해야 합니다.
    create an index와add fields to an existing index에서 필드 맵을 만듭니다.

    Create an index with an explicit mapping


    create index API를 사용하여 명시적 매핑이 있는 새 인덱스를 만들 수 있습니다.
    PUT /my-index-000001
    {
      "mappings": {
        "properties": {
          "age":    { "type": "integer" },    #   age , 
          "email":  { "type": "keyword"  },   #  email , 
          "name":   { "type": "text"  }   #   name ,     
        }
      }
    }
    

    Add a field to an existing mapping


    put mapping API를 사용하여 기존 인덱스에 새 필드를 하나 이상 추가할 수 있습니다.
    다음 예시는employee-id를 추가합니다. 이것은 키워드 필드입니다. 색인 매개 변수 값은false입니다.이는employee-id 필드의 값이 저장되어 있지만 색인이나 검색에 사용되지 않는다는 것을 의미합니다.
    PUT /my-index-000001/_mapping
    {
      "properties": {
        "employee-id": {
          "type": "keyword",
          "index": false
        }
      }
    }
    

    Update the mapping of a field


    지원되는 맵 매개 변수를 제외하고는 기존 필드의 맵이나 필드 형식을 변경할 수 없습니다.기존 필드를 변경하면 인덱스된 데이터가 잘못될 수 있습니다.
    데이터 흐름의 백업 인덱스 필드의 맵을 변경하려면 Change mappings and settings for a data stream을 참조하십시오.
    다른 인덱스의 필드 맵을 변경해야 한다면, 정확한 맵을 사용하여 새 인덱스를 만들고 데이터reindex를 이 인덱스에 넣으십시오.
    필드 이름을 바꾸면 이전 필드 이름에서 인덱스된 데이터가 잘못됩니다.대체 필드 이름을 만들기 위해alias 필드를 추가합니다.

    View the mapping of an index


    get mapping API를 사용하여 기존 인덱스의 매핑을 볼 수 있습니다.
    GET /my-index-000001/_mapping
    

    API는 다음 응답을 반환합니다.
    {
      "my-index-000001" : {
        "mappings" : {
          "properties" : {
            "age" : {
              "type" : "integer"
            },
            "email" : {
              "type" : "keyword"
            },
            "employee-id" : {
              "type" : "keyword",
              "index" : false
            },
            "name" : {
              "type" : "text"
            }
          }
        }
      }
    }
    

    View the mapping of specific fields


    특정 필드의 맵을 하나 이상 보려면 get field mapping API를 사용할 수 있습니다.
    색인의 전체 맵이나 색인에 대량의 필드가 필요하지 않으면 유용합니다.
    다음 요청은employee-id 필드의 맵을 검색합니다.
    GET /my-index-000001/_mapping/field/employee-id
    

    API는 다음 응답을 반환합니다.
    {
      "my-index-000001" : {
        "mappings" : {
          "employee-id" : {
            "full_name" : "employee-id",
            "mapping" : {
              "employee-id" : {
                "type" : "keyword",
                "index" : false
              }
            }
          }
        }
      }
    }
    

    자세한 내용은 홈페이지:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

    좋은 웹페이지 즐겨찾기