> For the complete documentation index, see [llms.txt](https://esbook.kimjmin.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://esbook.kimjmin.net/07-settings-and-mappings/7.1-settings.md).

# 7.1 설정 - Settings

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

{% code title="my\_index 인덱스 생성" %}

```javascript
PUT my_index
```

{% endcode %}

{% tabs %}
{% tab title="request" %}
{% code title="my\_index 인덱스의 settings, mappings 확인" %}

```javascript
GET my_index
```

{% endcode %}
{% endtab %}

{% tab title="response" %}
{% code title="my\_index 인덱스의 settings, mappings 확인 결과" %}

```javascript
{
  "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"
      }
    }
  }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

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

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

### number\_of\_shards, number\_of\_replicas&#x20;

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

{% code title="my\_index 인덱스 생성 - 괄호 { } 안에 하위 값 지정" %}

```javascript
PUT my_index
{
  "settings": {
    "index": {
      "number_of_shards": 3,
      "number_of_replicas": 1
    }
  }
}
```

{% endcode %}

{% code title="my\_index 인덱스 생성 - 마침표 . 으로 하위 값 지정" %}

```javascript
PUT my_index
{
  "settings": {
    "index.number_of_shards": 3,
    "index.number_of_replicas": 1
  }
}
```

{% endcode %}

{% code title="my\_index 인덱스 생성 - index 생략" %}

```javascript
PUT my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

```

{% endcode %}

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

&#x20; **number\_of\_replicas** 설정은 다이나믹하게 변경이 가능합니다. 이미 선언된 my\_index의 복제본 카피 개수를 1에서 2로 변경하려면 인덱스명 뒤에 \_settings API로 접근해서 변경할 설정만 입력해서 변경이 가능합니다.

{% code title="my\_index 인덱스의 number\_of\_replicas 값 변경" %}

```javascript
PUT my_index/_settings
{
  "number_of_replicas": 2
}
```

{% endcode %}

### refresh\_interval

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

{% code title="refresh\_interval 을 30초로 my\_index 생성" %}

```javascript
PUT my_index
{
  "settings": {
    "refresh_interval": "30s"
  }
}
```

{% endcode %}

### analyzer, tokenizer, filter

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

{% code title="refresh\_interval 을 30초로 my\_index 생성" %}

```javascript
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": "…"
          ...
        }
      }
    }
  }
}
```

{% endcode %}

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

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

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