kok202
Elastic search 실전 기본 (인덱스 스키마 설정)

2019. 3. 24. 02:13[공부] 독서/실무 예제 Elasticsearch 검색엔진 기본

localhost:9200/INDEX/_settings 로 인덱스 정보 바꾸기

{

"settings" : {

"number_of_shards" : 5,

"number_of_replicas" : 1,

"index" : {

"refresh_interval" : "1s"

},

"analysis" : {

# 인덱싱 언어 추출 (Term)

# 역 인덱스 파일 생성

# 하나의 tokenizer와 여러개 filter 로 구성

# 길어서 생략

# 책 53p 참조

},

"store" : {

"type" : "mmapfs"

"compress" : {

"stored" : true, 

"tv" : true

}

# Store type 

# 윈도우 64bit : mmapfs

# 윈도우 32bit : simplefs

# 나머지 : niofs

# Stored field, Term vector 압축 설정

}

}

 }







localhost:9200/INDEX/_mapping 로 인덱스 스키마 바꾸기

 {

"mappings" : {

"_doc" : {

"_id" : {

"index" : "not_analyzed",

"store" : "no",

"path" : "item_id"

# Document의 Primary 키 필드 설정

},

"_source" : { 

"enabled" : "true"

# 인덱싱 된 문서에 대한 모든 필드 데이터 저장하겠다.

# 검색 결과를 출력하는 용도면 true 분석이 목적이면 false로 하는 것을 추천한다.

},

"_all" : {

"enabled" : "false"

# 검색할 대상 필드가 정확하지 않을 경우 true로 사용한다.

# true로 하면 인덱싱 파일 용량이 증가한다.

# 실서비스에서는 false로 두고 검색 필드를 정의하는 것을 추천한다.

# false로 하면 어떤 필드를 인덱싱 할 것인지 analyzed 옵션을 줘야한다.

},

"properties" : {

"myName" : { 

"type" : "text",

"index" : "not_analyzed"

},

"myJob" : {

"type" : "text",

"index" : "analyzed"

},

"myDescription" : {

"type" : "text",

"index" : "not_analyzed"

},

"myBalance" : {

"type" : "long",

"index" : "not_analyzed"

}

}

}

}

 }


properties에 들어갈 수 있는 core type

모든 타입의 필드에 사용 가능한 core type

store : 원본의 저장 여부 설정 (기본값 : no)

index : 인덱싱을 어떻게 할 것인가? analyzed or not_analyzed (기본값 : analyzed )

boost : 중요도 (기본값 : 1)

null_value : null이 들어왔을 때 기본값을 설정

include_in_all :  _all 필드에서 검색 가능한 필드 정보를 포함할지 설정 (기본값 : true)

text 모든 타입의 필드에서만 사용 가능한 core type

index_options : 인덱싱 할 때 저장할 메타 정보 설정

index_analyzer : 인덱싱 할 때 사용할 분석기 설정

search_analyzer : 검색 할 때 사용할 분석기 설정

analyzer : 인덱싱, 검색 할 때 사용할 분석기 설정

ignore_above : 설정한 크기 이상의 문자열은 무시하겠다.

omit_norms : 검색 Score 계산할 때 term 빈도를 계산할 것 인가 (기본값 : analyzed 면 false 아니면 true)

term_vector : 인덱싱 언어에대한 메타 정보를 저장하겠다. (기본값  no)

기타 date, number에 사용가능한 core type

ignored_malformed : 잘못된 정보는 무시하겠다. (기본값 no)

format : date 한정 사용가능




용어 설명

token : term, 인덱싱을 통해 추출된 키 값

analyzed : 해달 필드를 분석해서 token, offset, position, term의 빈도, 문서 랭킹을 위한 유사도 등 정보 추출한다.

not analyzed : 해당 필드 분석 없이 필드값 하나가 token으로 구성된다.




Properties 값을 어떻게 주느냐에 따라 필드의 성격이 바뀐다.
인덱스를 생성하기전 필드들이 아래 5가지 중 어떤 성격을 가지는지 고민하고 맞춰서 properties를 집어넣는 것이 좋다.
* omit_norms은 어차피 index가 뭐냐에 따라 자동으로 설정이 되므로 생략한다.

1. 검색 필드

type : 원하는 대로

index : 원하는 대로

store : no

include_in_all : false

2. 패싯 필드 (카테고리 필드)

type : 원하는 대로

index : not_analyzed

store : no

include_in_all : false

3. 정렬 필드 (ex. price)

type : long, integer...

index : not_analyzed

store : no

include_in_all : false

4. 부스트 필드 (문서 검색의 정확도를 높여주기 위한 기능)

type : 원하는 대로

index : 원하는 대로

boost : 원하는 대로

store : no

include_in_all : false

5. 강조 필드

type : 원하는 대로

index : 원하는 대로

term_vector : with_positions_offsets

store : yes

include_in_all : false