본문 바로가기

Computer/Study

엘라스틱서치 실무가이드(3-1장)

3] 데이터모델링

  • 문서의 데이터 유형에 따라 필드에 적절한 데이터 타입을 지정 - 매핑 : 색인될 문서의 데이터 모델링
  • 미리 설정해 주지 않는다면 엘라스틱서치 내부에서 자체적으로 필드를 생성 후 타입까지 결정(스키마리스)

3.1] 매핑 API 이해

: 매핑은 색인시 데이터가 어디에 어떻게 저장될지를 결정하는 설정 > 역색인의 방법을 상세희 정의 > 데이터의 타입을 설정

 

[매핑 정보 설정시 고려사항]

  • 문자열을 분석할것인가?
  • _source에 어떤 필드를 정의할것인가?
  • 날짜 필드를 가지는 필드는 무엇인가?
  • 매핑에 정의되지 않고 유입되는 필드는 어떻게 처리할것인가?

3.1.1] 매핑 인덱스 만들기

PUT /<index>

- 해당 api를 통해 엘라스틱 서치 클러스터에 새로운 인덱스를 추가할 수 있으며 설정 및 인덱스 필드를 매핑할수 있고 aliases를 줄수가 있다.

 

3.1.2] 매핑 확인

GET /<index>/_mapping

- <index>의 매핑 정보를 확인 할 수 있다.

 

3.1.3] 매핑 파라미터

: 색인할 필드의 데이터를 어떻게 저장할지에 대한 다양한 옵션을통해 필드의 매핑 정보 설정

  • analyzer : 형태소분석을 수행을 의마하는 파라미터로 text타입일 경우 기본적으로 사용(미설정시 Standard Analyzer)
  • normalizer : term query에 분석기를 사용하기 위해 사용하며, 예를 들어 일반적으로 대소문자를 구분하여 다른 문서로 인지하나 normalizer를 통해 asciifolding 과 같은 필터를 사용해 하나의 문소로 인지할 수 있다.
  • boost : 필드에 가중치를 부여하여 _score가 달라져 노출 순서에 영향을 줄 수 있으나 색인 시점에 boost할 시 재색인 하지 않는 이상 변경할 수 없어 검색시에 사용을 추천(최근에는 boost설정을 할 수 없도록 바뀜)
  • coerce : 색인 시 자동 변환 사용 여부 설정(예를 들어 10과같은 숫자 형태의 문자열이 integer타입의 필드에 들어오면 자동으로 변경해주는 설정
  • copy_to : 필드의 값을 지정한 필드로 복사(keyword 타입 필드에 copy_to파라미터를 사용해 다른 필드로 값을 복사시 복사된 필드에서 text 타입을 지정해 형태소 분석을 할 수 있다.)
  • fielddata : 엘라스틱 서치가 힙공간에 생성하는 메모리 캐시로 현재는 사용안함(메모리 부족현상, 잦은 GC). 단, text 타입에서 집계나 정렬을 수행하는 경우에 한하여 사용하며 메모리에 생성되므로 최소한만 사용(주의)
  • doc_values : fielddata대신 엘라스틱에서 사용하는 기본 캐시이다. 만약 필드를 정렬, 집계할 필요가 없고 스크립트에서 필드의 값에 액세스할 필요가 없다면 비활성할 수 있으나 대신, 재색인 하지 않는 이상 변경이 불가능하다.
  • dynamic : 매핑에 필드를 추가할 때 동적생성 여부를 결정
    • true : 새로 추가되는 필드를 매핑에 추가
    • false : 새로 추가되는 필드는 무시. 해당 필드는 색인 되지 않아 검색할 수 없으나 _scource에는 표시
    • strict : 새로운 필드가 감지되면 예외가 발생하고 문서 자체가 색인 되지 않는다.(새로 유입된 필드에 한해 사용자가 명시적으로 추가)
  • enabled : 검색 결과에는 포함하지만 색인은 하고 싶지 않느 경우 사용
  • format : 엘라스틱 서치는 날짜/시간을 문자열로 표시하나 미리 구성된 포맷을 사용가능하다.
    • basic_date : yyyyMMdd
    • basic_date_time : yyyyMMdd'T'HHmmss.SSSZ
    • basic_time : HHmmss.SSS
    • date/strict_date : yyyy-MM-dd
    • date_hour_minute_second/strict_date_hour_minute_second : yyyy-MM-dd'T'HH:mm:ss.
    • date_hour_minute_second_millis/strict_date_hour_minute_second_millis : yyyy-MM-dd'T'HH:mm:ss.SSS.
    • date_time/strict_date_time : yyyy-MM-dd'T'HH:mm:ss.SSSZZ
  • ignore_above : 필드에 저장되는 문자열이 지정한 크기를 넘어서면 빈 값으로 색인한다(지정된 크기만큼만 색인되는 것이 아닌 빈 값으로 저장되므로 주의)
  • ignore_malformed : 잘못된 데이터 타입을 색인하려고 하면 예외 발생하고 전부 색인 되지 않음 > 해당 필드만 무시하고 문서 색인 가능
  • index : 필드값을 색인할지 결정하며 기본값은 true / false로 변경시 색인하지 않음
  • field : 다중 필드를 설정할수 있는 옵션으로 필드 안에 또 다른 필드의 정보를 추가 할 수있어 String값을 각각 다른 분석기로 처리하도록 설정 가능(하나는 전문 검색, 하나는 집계용 이용 등)
  • norms : 문서의 _score 값 계산에 필요한 정규화 인수를 사용할지 여부 설정(기본값 true 이며 _score 계산이 필요 없거나 단순 필터링 용도로 사용시 필드는 비활성화해서 디스크 공간 절약 가능)
  • null_value : 색인시 문서에 필드가 없거나 필드의 값이 null이러다도 filed를 생성해줌(본래 생성이 안됨)
  • position_increment_gap : 배열 형태의 데이터를 색인시 검색의 정확도를 높이기 위해 제공하는 옵션(단어와 단어 사의의 간격을 허용할지 설정)
  • properties : 오브젝트 타입이나 중첩 타입의 스키마를 정의할 때 사용되는 옵션으로 필드의 타입을 매핑(오브젝트 필드 및 중첩필드에는 properties라는 서브필드가 있어 모든 데이터 타입이될 수 있음.
  • search_analyzer : 일반적으로 색인과 검색시 같은 분석기 사용하나 다르게 사용하고 싶을 경우 별도 지정하기 위한 타입
  • similarity : 유사도 측정 알고리즘 지정하며 기본 알고리즘인 BM25에서 다른 알고리즘 선택 가능
  • store : 필드 값을 저장해 검색 결과에 값을 포함하기위한 매핑 파라미터로 _source에 색인된 문서가 저장되나 store 매핑 파라미터를 사용하면 해당 필드를 자체적으로 저장 가능(대신 디스크를 더 많이 사용)
  • term_vector : 루씬에서 분석된 용어의 정보를 포함할지 여부를 결정하는 매핑 파라미터

3.2] 메타 필드

: 엘라스틱에서 생성된 문서에 제공하는 특별한 필드로 메타데이터를 저장하는 특수 목적의 필드로 검색시 문서를 다양한 형태로 제어가 가능

 

3.2.1] _index 메타필드

: 해당문서가 속한 인덱스의 이름을 담고있음으로 하여 어떠한 인덱스에 포함되었는지와 해당인덱스에 몇개의 문서가 있는지 알 수 있다.

 

3.2.2] _type메타필드

: 해당문서가 속한 매핑의 타입 정보를 담고 있다. 해당 정보를 이용해 타입별로 몇개의 문서가 있는지 확인할 수 있다.

 

3.2.3] _id 메타틸드

: _id 메타필드는 문서를 식별하는 유일한 키값으로 키값에 대흥하는 모든 문서 출력

 

3.2.4] _uid 메타필드

: 특수 목적의 식별키로 #태그를 사용해 _type와 _id값을 조합하여 사용하지만 내부적으로 사용되기 대문에 검색시 조회되는 값은 아님.

 

3.2.5] _source 메타필드

: 문서의 원본 데이터를 제공하며 내부에는색인시 전달된 원본 JSON문서의 본문이 저장되어 있다. 

  • _reindex API를 호출하여 스크립트를이용해 특정 필드에 접근할 수 있다.

3.2.6] _all메타 필드

: 색인에 사용된 모든 필드의 정보를 가진 메타필드로 모든 필드의내용이 하나의 텍스트로 합쳐져 제공

 

3.2.7] _routing 메타필드

: 특정문서를 특정샤드에 저장하기 위해 사용자가 지정하는 메타필드로 라우팅을 파라미터로 주어 라우팅된 샤드만 조회하여 결과를 보여줘 성능을 향상시킬수 있다.


3.3] 필드 데이터 타입

: 엘라스틱에서 제공하는 매핑설정을 위한 데이터 타입

  • keyword, text 같은 문자열 데이터 타입
  • date, long, double, integer, boolean, ip 같은 일반적인 데이터 타입
  • 객체 또는 중첩문과 같은 JSON 계층의 특성 데이터 차입
  • geo_point, geo_shape 같은 특수 데이터 타입

3.3.1] Keyword 데이터 타입

: 키워드형태로 사용할 데이터에 적합한 데이터 타입으로 키워드를 사용할경우 별도의 분석기를 거치지 않고 원문 그대로 색인하기때문에 정형화된 콘텐츠에 주로 사용

 

▶일반적으로 사용되는 항목

  • 검색시 필터링 되는 항목
  • 정렬이 필요한 항목
  • 집계해야 하는 항목

3.3.2] Text 데이터 타입

: 색인 시 지정된 분석기가 칼럼의 데이터를 문자열 데이터로 인식하고 분석하면 분석기를 정의하지 않았다면 기본 분석기를 사용하며 만야 해당 데이터 타입에 정령이나 집계연산이 필요할 겅우 멀티 필드로 설정하여야 한다.