Elasticsearch

Elasticsearch - 매핑(Mapping)

Namiz_IT 2024. 9. 3. 10:28
반응형

매핑(Mapping)이란?

Elasticsearch에서 mapping을 하는 이유는 데이터의 구조와 타입을 정의하여 효율적으로 검색하고 데이터를 관리하기 위함이다. Elasticsearch는 검색 및 분석을 위해 최적화된 분산형 검색 엔진이며, 데이터의 저장과 검색 성능을 극대화하기 위해 사전에 데이터 필드의 타입과 속성을 정의해야 한다. 다음은 Elasticsearch에서 mapping을 하는 주요 이유이다.

  1. 데이터 타입 정의: Elasticsearch는 다양한 데이터 타입(예: text, keyword, date, integer, float, boolean 등)을 지원한다. 각 필드의 데이터 타입을 명시적으로 정의함으로써, 검색과 인덱싱 시 최적화된 자료 구조와 알고리즘을 사용할 수 있다. 예를 들어, date 타입 필드는 날짜 기반의 범위 쿼리와 정렬에 최적화된다.
  2. 검색 성능 최적화: Elasticsearch는 역색인(inverted index)을 사용하여 검색을 수행한다. 특정 필드의 타입에 따라 역색인 구조가 달라지므로, 필드 타입을 올바르게 정의하는 것은 검색 성능에 매우 중요한 역할을 한다. 예를 들어, text 타입은 토큰화와 분석을 거쳐 역색인에 저장되지만, keyword 타입은 그대로 저장되어 정확한 값 일치 검색에 적합하다.
  3. 데이터 무결성 유지: Mapping을 통해 각 필드의 타입을 미리 정의함으로써, 잘못된 데이터가 인덱스에 저장되는 것을 방지할 수 있다. 예를 들어, 숫자형 필드에 문자열 데이터를 저장하려고 시도하면 Elasticsearch가 오류를 반환한다. 이를 통해 데이터의 무결성을 유지할 수 있다.
  4. 사용자 정의 분석기와 필터 설정: Mapping을 설정할 때 사용자 정의 분석기(analyzer), 토큰 필터(token filter), 문자 필터(char filter) 등을 지정할 수 있다. 이는 텍스트 필드의 토큰화와 분석 과정을 제어하여 검색 품질을 높이고, 사용자 요구에 맞는 검색 결과를 제공하는 데 필수적이다.
  5. 필드 동작 설정: 특정 필드가 검색 가능한지 여부, 인덱싱 할 것인지, 필드를 저장할 것인지 등의 동작을 정의할 수 있다. 예를 들어, enabled: false로 설정하여 필드를 인덱싱하지 않도록 할 수 있다. 이렇게 하면 해당 필드는 검색되지 않으며, 인덱스 크기와 성능에 긍정적인 영향을 줄 수 있다.
  6. 다중 언어 지원 및 특수 처리: 다양한 언어를 지원하기 위해 각 언어에 맞는 분석기와 필터를 설정할 수 있다. 예를 들어, 한국어, 일본어, 중국어와 같은 언어는 각기 다른 형태소 분석기를 사용해야 하며, 이를 적절히 설정하여 검색 정확도를 높일 수 있다.

요약하면, Elasticsearch에서 mapping은 데이터의 구조를 명확히 정의하고, 검색 및 인덱싱 성능을 최적화하며, 데이터 무결성을 보장하기 위해 필요하다. 또한, 사용자 정의 설정을 통해 특정 검색 요구사항에 맞게 최적화된 인덱스를 구성할 수 있다.

반응형

동적 매핑

새로운 필드의 자동 감지 및 추가를 동적 매핑 이라고 한다. 동적 매핑 규칙은 다음을 사용하여 목적에 맞게 사용자 정의할 수 있다.

  • 동적 필드 매핑 : 동적 필드 감지를 지배하는 규칙
  • 동적 템플릿 : 동적으로 추가된 필드에 대한 매핑을 구성하기 위한 사용자 정의 규칙

명시적 매핑

Elasticsearch는 기본적으로 동적 매핑(dynamic mapping)* 사용하여 문서가 인덱스에 처음 저장될 때 필드의 데이터 타입을 자동으로 추론하고 할당한다. 그러나 명시적 매핑을 사용하면 필드의 데이터 타입과 속성을 수동으로 정의하여 더 큰 제어권을 가질 수 있다.

 

인덱스의 매핑정보를 보는 명령어

GET /my-index-000001/_mapping

 

실행 결과

{
  "my-index-000001" : {
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "email" : {
          "type" : "keyword"
        },
        "employee-id" : {
          "type" : "keyword",
          "index" : false
        },
        "name" : {
          "type" : "text"
        }
      }
    }
  }
}

 

인덱스의  특정 필드(Field)의 매핑정보를 보는 명령어

GET /my-index-000001/_mapping/field/employee-id

 

실행 결과

{
  "my-index-000001" : {
    "mappings" : {
      "employee-id" : {
        "full_name" : "employee-id",
        "mapping" : {
          "employee-id" : {
            "type" : "keyword",
            "index" : false
          }
        }
      }
    }
  }
}

런타임 필드

  • 런타임 필드는 Elasticsearch에서 인덱스에 저장된 데이터를 쿼리할 때 동적으로 계산되는 필드이다. 즉, 실제로 인덱스에 저장되지 않고, 쿼리 요청 시점에 필요에 따라 계산된다.
  • 런타임 필드를 사용하면 데이터 구조를 사전 정의하지 않고도 다양한 분석과 쿼리를 수행할 수 있다.
  • 장점
    • 유연성: 데이터가 인덱스에 저장된 후에도 새로운 필드를 쉽게 추가할 수 있다.
    • 즉각적인 응답: 인덱스를 다시 구축할 필요 없이 데이터 변경사항에 즉각적으로 대응할 수 있다.
    • 저장 공간 절약: 런타임 필드는 인덱스 시에 저장되지 않으므로, 저장 공간을 절약할 수 있다.
  • 단점
    • 성능 저하 가능성: 런타임에 필드를 계산해야 하므로, 인덱스에서 사전에 계산된 필드에 비해 쿼리 성능이 떨어질 수 있다.
    • 복잡성 증가: 런타임 필드를 많이 사용하면 관리가 복잡해질 수 있다.

참조

 

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

 

Mapping | Elasticsearch Guide [8.15] | Elastic

Mapping is the process of defining how a document, and the fields it contains, are stored and indexed. Each document is a collection of fields, which each have their own data type. When mapping your data, you create a mapping definition, which contains a l

www.elastic.co

 

반응형

'Elasticsearch' 카테고리의 다른 글

Elasticsearch - 검색(Search) #2  (0) 2024.09.04
Elasticsearch - 검색(Search) #1  (0) 2024.09.03
Kibana란 무엇인가?  (0) 2024.08.27
Elasticsearch 주요 개념 요약  (0) 2024.08.27
Elasticsearch란 무엇인가?  (0) 2024.08.27