7.1 설정 - Settings

이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍니다.

모든 인덱스는 두 개의 정보 단위를 가지고 있는데 바로 settingsmappings 입니다. 인덱스를 처음 생성한 뒤 GET <인덱스명> 으로 조회하면 설정(settings) 그리고 매핑(mappings) 정보를 확인할 수 있습니다.

my_index 인덱스 생성
PUT my_index
request
response
request
my_index 인덱스의 settings, mappings 확인
GET my_index
response
my_index 인덱스의 settings, mappings 확인 결과
{
"my_index" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1568695052917",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "Ol2vvLbgSfiJcjDC0Eo85A",
"version" : {
"created" : "7030099"
},
"provided_name" : "my_index"
}
}
}
}

settings 또는 mappings 정보만 따로 보고 싶으면 GET my_index/_settings 처럼 인덱스명 뒤에 _settings 또는 _mappings 를 추가해서 볼 수 있습니다. 처음 인덱스를 정의하면 몇가지 정보들이 자동으로 생성이 되는데, 샤드 수(number_of_shards) 나 복제본 수(number_of_replicas) 같은 정보는 settings 아래 설정됩니다. 샤드 수는 6.x 버전 까지는 디폴트로 5개가 설정되었고, 7.0 부터는 디폴트 1개로 설정이 됩니다.

위 예제는 PUT my_index 명령으로 인덱스만 생성하고 데이터는 입력하지 않았기 때문에 "mappings" : { } 정보는 아직 생성되지 않았습니다. 기본 설정들은 인덱스를 처음 생성할 때 명시합니다. 어떤 설정들은 운영 도중에도 바꿀 수 있지만 대부분의 설정들은 한번 지정하면 변경이 되지 않는 경우가 많습니다.

number_of_shards, number_of_replicas

먼저 앞에서 여러 번 이미 언급을 했는데, 프라이머리 샤드 수와 리플리카는 다음과 같이 각각 number_of_shards, number_of_replicas 에서 설정합니다. 대부분의 설정들은 settings 아래의 index 아래 설정에 명시되는데 index 레벨은 생략하고 입력하여도 정상적으로 입력이 됩니다. 입력하는 JSON 설정값은 { } 내부에 써도 되고 마침표 .를 이용해서 구조를 정의하는것도 가능합니다. 다음 명령들은 모두 동일하게 동작합니다.

my_index 인덱스 생성 - 괄호 { } 안에 하위 값 지정
PUT my_index
{
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
}
my_index 인덱스 생성 - 마침표 . 으로 하위 값 지정
PUT my_index
{
"settings": {
"index.number_of_shards": 3,
"index.number_of_replicas": 1
}
}
my_index 인덱스 생성 - index 생략
PUT my_index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}

number_of_shards 설정은 인덱스를 처음 생성할 때 한번 지정하면 바꿀 수 없습니다. 샤드 수를 바꾸려면 새로 인덱스를 정의하고 기존 인덱스의 데이터를 재색인 해야 합니다. shrink API또는 split API를 이용해서 샤드 수를 변경하는 방법이 존재하기는 하지만 인덱스를 close 해야 하고, 파일 재배치를 하는 작업을 하는 복잡한 과정이기에 기본적으로 샤드 수의 변경은 불가능하다 라고 인식하고 사용할 하는 것이 좋습니다.

number_of_replicas 설정은 다이나믹하게 변경이 가능합니다. 이미 선언된 my_index의 복제본 카피 개수를 1에서 2로 변경하려면 인덱스명 뒤에 _settings API로 접근해서 변경할 설정만 입력해서 변경이 가능합니다.

my_index 인덱스의 number_of_replicas 값 변경
PUT my_index/_settings
{
"number_of_replicas": 2
}

refresh_interval

자주 사용되는 설정 중에 refresh_interval 이 있습니다. Elasticsearch 에서 세그먼트가 만들어지는 리프레시 타임을 설정하는 값인데 기본은 1초(1s) 입니다. refresh_interval 역시 number_of_replicas 마찬가지로 설정 변경이 가능한 다이나믹 설정이며 똑같이 settingsindex 아래에 설정합니다. 다음은 처음 인덱스를 정의할 때 refresh_interval을 30초로 설정하는 명령입니다.

refresh_interval 을 30초로 my_index 생성
PUT my_index
{
"settings": {
"refresh_interval": "30s"
}
}

analyzer, tokenizer, filter

앞 장에서 살펴보았던 애널라이저, 토크나이저, 토큰 필터 역시 setting 내부에 정의합니다. 정의하는 기본 구조는 다음과 같습니다.

refresh_interval 을 30초로 my_index 생성
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"char_flter": [ "...", "..." ... ]
"tokenizer": "...",
"filter": [ "...", "..." ... ]
}
},
"char_filter":{
"my_char_filter":{
"type": "…"
...
}
}
"tokenizer": {
"my_tokenizer":{
"type": "…"
...
}
},
"filter": {
"my_token_filter": {
"type": "…"
...
}
}
}
}
}

"analysis": { } 내부에 "analyzer": { }, "char_filter":{ }, "tokenizer": { }, "filter": { } 를 입력하고 각자의 내부에서 임의의 이름을 주어 각 기능들을 정의합니다. 각 내부에 하나 이상을 생성할 수도 있으며 애널라이저에서는 사용자가 정의한 토크나이저, 토큰 필터를 사용하거나 Elasticsearch 안에 미리 정의되어 있는 것들의 사용이 가능합니다.

"analysis": { } 내용은 한번 생성 후 변경은 불가능합니다. 이미 만들어진 인덱스에 애널라이저나 토크나이저 등을 추가하거나 사전을 변경하려면 인덱스를 먼저 _close 한 후에 추가하고 다시 _open 해서 적용할 수 있습니다. 애널라이저 설정에 대한 상세 내용들은 앞의 6.3 애널라이저 장에 설명이 되어 있으니 필요하시면 다시 돌아가 복습 해 보시기 바랍니다.

이 외에도 settings 에 설정 가능한 정보가 많이 있습니다. 나중에 사용 하시면서 공식 도큐먼트를 계속 참고 하시기 바랍니다.