본문 바로가기

Backend Study/ELK Stack

3. 데이터 모델링

3.1 매핑 API

매핑이란? 색인 시 데이터가 어디에 어떻게 저장될지를 결정하는 설정. 인덱스에 추가되는 각 데이터 타입을 구체적으로 정의한다.

다음과 같은 사항을 고민해야한다.

- 문자열을 분석할 것인가?

- _source에 어떤 필드를 정의할 것인가?

- 날짜 필드를 가지는 필드는 무엇인가?

- 매핑에 정의되지않고 유입되는 필드는 어떻게 처리할 것인가?

 

인덱스 생성: 

PUT movie_search

 

매핑 확인: 

GET movie_search/_mapping

 

3.1 매핑 파라미터

analyzer:

해당 필드의 데이터를 형태소 분석하겠다. text 데이터 타입의 필드는 analyzer 매핑 파라미터를 기본적으로 사용한다.

 

normalizer:

keyword 데이터 타입의 경우 원문 기준으로 문서가 색인되기 때문에 cafe, Cafe는 서로 다른 문서로 인식되지만 normalizer를 통해 분석기에 필터를 사용하면 같은 데이터로 인식할 수 있다.

 

boost: 

필드에 가중치를 부여한다. 이는 결과의 노출 순서에 영향을 준다. (현재 제거된 기능)

 

coerce: 

색인 시 자동 변환을 허용할지 여부 ex. "10"과 같은 숫자 형태의 문자열이 integer 타입의 필드로 들어오면 자동으로 형변환함.'

 

copy_to:

keyword 타입의 필드에 copy_to 매핑 파라미터를 사용해 다른 필드로 값을 복사하면 복사된 필드에서는 text 타입을 지정해 형태소 분석을 할 수 있다.

ex. 

{ "movieCd":"20170727",

"movieNm":"살아남은 아이",

"movieNmEn":"Lastchild"}

copy_to 파라미터를 이용하면 movieNm과 movieNmEn의 결과를 합해서 "살아남은 아이 lastchild"라는 데이터를 저장하는 필드를 생성할 수 있다.

 

그 외 등등

 

3.2  메타 필드

_type: 해당 문서가 속한 매핑의 타입 정보를 담고있다.

_id: 문서를 식별하는 유일한 키 값이다. 한 인덱스에서 색인된 문서마다 서로 다른 키 값을 가진다.

 

그 외 등등

 

3.2  필드 데이터 타입

keyword, text: 문자열 데이터 타입

date, long, double, integer, boolean, ip: 일반적 데이터 타입

객체 또는 중첩문과 같은 JSON 계층 특성의 데이터 타입

geo_point, geo_shape 같은 특수한 데이터 타입

 

3.31  Keyword 데이터 타입

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

 

PUT movie_search_datatype/_mapping/_doc
{
	"properties" : {
    	"multiMovieYn" : {
        	"type" : "keyword"
        }
    }
}

keyword 데이터 타입은 아래에 해당하는 항목에 많이 사용된다.

- 검색 시 필터링되는 항목

- 정렬이 필요한 항목

- 집계해야하는 항목

 

만약 'elastic search' 라는 문자열이 Keyword 타입으로 설정되면 'elastic'이나 'search'라는 질의로는 검색되지 않는다.

 

3.32  Text 데이터 타입

색인 시 지정된 분석기가 칼럼의 데이터를 문자열 데이터로 인식하고 이를 분석한다. 별도의 분석기를 정의하지 않았다면 기본적으로 Standart Analyzer를 사용한다. 영화의 제목이나 영화의 설명글과 같이 문장 형태의 데이터에 사용하기 적합하다.

 

전문 검색이 가능하고, Text 타입으로 데이터를 색인하면 전체 텍스트가 토큰화되어 생성되며 특정 단어를 검색하는 것이 가능해진다.

 

Text 데이터 타입을 사용할 경우 필드에 검색뿐 아니라 정렬이나 집계 연산을 사용해야할 때가 있다. 이런 경우 Text 타입과 Keyword 타입을 동시에 갖도록 멀티 필드로 설정 가능하다. 

 

3.33  Array 데이터 타입

ex. 

PUT movie_search_datatype/_doc/1
{
	"title" : "해리포터와 마법사의 돌",
    "subtitleLang" : ["ko", "en"]
}

 

3.34  Numeric 데이터 타입

long, integer, short, byte, double, float, half_float

 

3.35  Date 데이터 타입

3.36  Range 데이터 타입

long, integer, short, byte, double, float, half_float

 

3.37  Boolean 데이터 타입

그 외 Geo-Point, IP, Object, Nested 

 

참고) 엘라스틱 서치 실무 가이드

 

'Backend Study > ELK Stack' 카테고리의 다른 글

엘라스틱서치 키바나로 스냅샷 생성하기  (0) 2023.01.24
4. 데이터 검색  (0) 2023.01.24
3.4 엘라스틱서치 분석기  (0) 2023.01.22
02. 엘라스틱서치 살펴보기  (0) 2023.01.12
검색 시스템 이해하기  (0) 2023.01.08