Setting

2022. 1. 27. 13:57개발이야기/ElasticSearch

반응형

ElasticSearch의 인덱스 생성은 setting과 mapping으로 이루어져 있습니다.

analyzer, tokenizer, filter

문자를 분석할 때 필요한 analyzer, tokenizer, filter는 setting 내부에 정의하며 기본 구조는 다음과 같습니다.

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, tokenizer, filter의 각 기능을 정의할 수 있습니다.
각 내부에 하나 이상으로 생성할 수 있으며 analyzer는 사용자가 정의한, 혹은 내장 tokenizer, filter를 사용 가능합니다.

 

Index modules

인덱스 모듈은 인덱스 별로 생성되는 모듈로 인덱스와 관련된 모든 측면을 제어합니다.

인덱스 설정은 인덱스 별로 설정할 수 있습니다.

Static index settings (정적 인덱스 설정)


정적 인덱스 설정은 인덱스 생성 시 또는 closed index에서만 설정할 수 있습니다 .

다음은 특정 인덱스 모듈과 연결되지 않은 모든 정적 인덱스 설정 목록입니다.

 

  • index.number_of_shards

number_of_shards 를 선언하여 인덱스의 기본(프라이머리) 샤드 수를 설정할 수 있습니다.
이 설정은 인덱스 생성 시에만 설정할 수 있으며 closed index에서는 변경할 수 없습니다.

기본 값은 1입니다.

PUT my_index
{
  "settings": {
    "number_of_shards": 5
  }
}​

Dynamic index settings (동적 인덱스 설정)


update-index-settings API 를 사용하여 라이브 인덱스에서 수정할 수 있습니다 .

 

  • index.number_of_replicas

number_of_replicas 를 선언하여 인덱스의 복제본(리플리카) 샤드 수를 설정할 수 있습니다.
각 기본(프라이머리) 샤드에 있는 복제본(리플리카) 샤드 수입니다.

기본 값은 1입니다.

PUT my_index
{
  "settings": {
    "number_of_replicas": 1
  }
}

 

  • index.max_ngram_diff

NGramTokenizer및 NGramTokenFilter에 대해 min_gram과 max_gram사이에 허용되는 최대 차이입니다.

max_ngram_diff의 기본 값은 1입니다.

아래와 같이 max_ngram_diff 설정 없이 min_gram과 max_gram의 차이가 1보다 크면 에러가 노출되며 인덱스 생성이 불가합니다.

FAIL CASE

PUT my_index
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "ngram_tokenizer":{
          "type": "ngram",
          "min_gram": 2,
          "max_ngram": 6
        }
      }
    }
  }
}

max_ngram_diff을 5 로 설정하게 되면 min_gram과 max_gram의 차이를 5까지 설정 가능하다는 의미입니다.

SUCCESS CASE

PUT my_index
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "ngram_tokenizer":{
          "type": "ngram",
          "min_gram": 2,
          "max_ngram": 6
        }
      }
    },
    "max_ngram_diff": 5
  }
}
  • index.max_shingle_diff

shingle토큰 필터 에 대해 max_shingle_size와 min_shingle_size사이에 허용되는 최대 차이 입니다.

기본 값은 3입니다.

반응형

'개발이야기 > ElasticSearch' 카테고리의 다른 글

Query DSL / Term-level queries / Term  (0) 2022.03.08
Query DSL  (0) 2022.03.08
Mapping  (0) 2022.01.28
Analyzer  (0) 2022.01.25
REST API  (0) 2022.01.20