Elasticsearch: 설정(Settings) 이해하기

Elasticsearch에서 **인덱스를 생성할 때 필요한 설정(Settings)**은 매우 중요한 요소입니다.
모든 인덱스는 두 개의 핵심 정보 단위를 가지며,
Settings (설정): 인덱스의 기본적인 동작을 정의
Mappings (매핑): 필드의 데이터 유형과 분석 방법을 지정

이번 글에서는 Settings의 개념, 주요 설정 요소, 그리고 변경 가능 여부에 대해 상세히 알아보겠습니다.


1. Elasticsearch Settings란?

🔹 기본 개념

  • Settings는 Elasticsearch 인덱스의 구성 및 동작을 정의하는 설정 값입니다.
  • 주요 설정에는 샤드(Shard) 개수, 복제본(Replica) 개수, 리프레시 간격(refresh_interval), 애널라이저(analyzer) 등이 포함됩니다.
  • 인덱스를 생성할 때 설정되며, 일부 설정은 운영 중에도 변경 가능하지만, 일부는 한 번 설정되면 변경 불가능합니다.

📌 인덱스 정보 조회 예제

GET my_index

🔹 결과:

  • settings → 인덱스의 설정 정보
  • mappings → 필드 타입 및 매핑 정보

📌 설정만 따로 조회

GET my_index/_settings

📌 매핑 정보만 따로 조회

GET my_index/_mappings

2. 샤드(Shard)와 복제본(Replica) 설정

🔹 샤드(Shard)란?

  • Elasticsearch의 인덱스는 여러 개의 샤드(Shard)로 분할 저장됩니다.
  • 기본적으로 하나의 인덱스는 **프라이머리 샤드(Primary Shard)와 복제 샤드(Replica Shard)**로 구성됩니다.

설정 값 설명 기본값

number_of_shards 인덱스의 프라이머리 샤드 개수 7.x부터 기본값 1
number_of_replicas 복제본 개수 (프라이머리 샤드 당) 7.x부터 기본값 1

📌 샤드 & 복제본 설정 예제

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

🔹 샤드 개수 변경 가능 여부

  • number_of_replicas운영 중 변경 가능
  • number_of_shards인덱스 생성 후 변경 불가

📌 복제본 개수 변경 예제

PUT my_index/_settings
{
  "number_of_replicas": 2
}

📌 샤드 개수 변경이 필요한 경우
샤드 개수를 변경하려면 새로운 인덱스를 생성하고 기존 데이터를 다시 색인(reindexing) 해야 합니다.


3. Refresh Interval 설정

🔹 Refresh Interval이란?

  • Elasticsearch는 새로운 문서를 색인한 후 일정 주기로 검색 가능하도록 처리합니다.
  • 이 주기를 refresh interval이라고 하며, 기본값은 1초(1s) 입니다.
  • 값을 늘리면 색인 성능이 향상되지만, 검색 반영이 느려질 수 있음

📌 refresh_interval 설정 예제 (30초로 변경)

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

📌 운영 중 refresh_interval 변경 가능

PUT my_index/_settings
{
  "refresh_interval": "5s"
}

색인 작업이 많을 때는 "refresh_interval": "-1" 로 설정하여 자동 리프레시를 비활성화하고, 배치 색인 후 POST my_index/_refresh 를 실행하여 직접 리프레시할 수도 있습니다.


4. Analyzer, Tokenizer, Filter 설정

Elasticsearch에서 **애널라이저(Analyzer)**를 설정하려면 settings 내부의 analysis 항목을 사용합니다.

📌 사용자 정의 애널라이저 설정 예제

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "char_filter": [ "html_strip" ],
          "tokenizer": "standard",
          "filter": [ "lowercase", "stop" ]
        }
      }
    }
  }
}

🔹 설명

  • "type": "custom" → 사용자 정의 애널라이저
  • "char_filter": ["html_strip"] → HTML 태그 제거
  • "tokenizer": "standard" → 기본 토큰화
  • "filter": ["lowercase", "stop"] → 소문자 변환, 불용어(stopword) 제거

🔹 Analyzer 변경 가능 여부

  • 애널라이저 설정(analysis)은 변경 불가능
  • 변경하려면 인덱스를 close → 설정 변경 → 다시 open 해야 함

📌 애널라이저 변경 방법

POST my_index/_close
PUT my_index/_settings
{
  "analysis": {
    "analyzer": {
      "new_analyzer": {
        "type": "custom",
        "tokenizer": "whitespace"
      }
    }
  }
}
POST my_index/_open

❗ 하지만 이미 존재하는 필드의 분석 방식은 변경할 수 없음새로운 인덱스를 만들고 데이터를 다시 색인해야 함


5. 정리

설정 값 설명 변경 가능 여부
number_of_shards 인덱스의 프라이머리 샤드 개수 ❌ 변경 불가
number_of_replicas 프라이머리 샤드 당 복제본 개수 ✅ 변경 가능
refresh_interval 색인된 데이터가 검색 가능해지는 주기 ✅ 변경 가능
analysis (Analyzer) 텍스트 분석기 설정 ❌ 변경 불가 (재색인 필요)

6. 학습 가이드

1️⃣ 샤드와 복제본 개수 설정 방법 실습
2️⃣ refresh_interval을 변경하며 색인 성능 테스트
3️⃣ 사용자 정의 애널라이저를 설정하고 분석 결과 확인
4️⃣ Analyzer 변경 불가 원리를 이해하고, 새로운 인덱스로 재색인 연습


7. 마무리

Elasticsearch의 Settings는 인덱스의 성능과 검색 효율성을 결정하는 중요한 요소입니다.
특히 샤드와 복제본 개수, Refresh Interval, 분석기 설정을 이해하고 적절히 활용하는 것이 중요합니다.

다음 학습에서는 Mappings을 활용한 필드 타입 및 데이터 구조 정의 방법을 다루겠습니다! 🚀

+ Recent posts