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 |