인덱스 세팅 조회
//모든 인덱스 의 세팅 조회
GET _all/_settings
//my-index의 세팅 조회
GET my-index/_settings
//와일드 카드 매칭을 이용해 세팅 조회
GET log-2023-*/_settings
인덱스 생성
PUT my-index
{
"aliases": {}
"mappings": {}
"settings": {}
}
인덱스 세팅 수정
PUT /my-index/_settings
{
"index": {
"number_of_shards": 2,
"number_of_replicas": 1,
}
}
Settings
- 인덱스의 샤드 개수 및 레플리카 개수 등 인덱스를 설정할때 사용한다.
- analyzer, tokenizer, filter와 같은 정보 설정시 에도 Settings 필드 내에서 설정 한다.
Dynamic Settings, Static Settings
인덱스 Settings의 경우 Dynamic Settings과 StaticSettings가 있다.
- Static Settings: 인덱스 생성 시점 혹은 인덱스가 close 상태인 경우에 설정 변경이 가능하다.
- Dynamic Settings: 인덱스가 운행중인 상태에서도 설정 변경이 가능하다.
Static Settings
- index.number_of_shards: (정수) 샤드의 개수를 지정 한다.
- index.number_of_routing_shards: (정수) 인덱스에 도큐먼트를 저장할 때, 어떤 샤드에 저장 될지 도큐먼트 key값에 대해 해시함수로 적용 되는데, 기본적으로 해당 옵션을 지정하지 않으면 샤드의 개수만큼 해시함수 범위가 지정 된다. (샤드가 3개라면 0~2) 하지만 해당 옵션을 30까지 준다면, 샤드가 3개라도 해시함수 범위가 0~29 로 확장 되고, 추후 데이터가 늘어나서 샤드 개수를 늘릴 때 유용하게 사용된다.
- index.codec: (default, best_compression) 저장되는 데이터의 압축 방식을 지정 한다.
- index.routing_partition_size: (정수) 라우팅 파티션 개수를 정의한다. 각 샤드에 파티션으로 나누어 처리하여 id로 접근 시에 특정 샤드의 특정 파티션만 접근하면 되므로 성능이 향상될 수 있으나, 샤드에 고르게 분배되지 않고 집중되어 데이터가 저장될 수 있는 문제가 있다.
- index.soft_deletes_enabled: (boolean) 소프트 딜리트 가능 여부를 설정한다. 소프트 딜리트란 데이터를 바로 삭제하는 것이 아니라 삭제 플래그 값으로 변경 처리 하는 것이다.
- index.soft_deletes.retention_lease.period: (시간) 소프트 삭제가 유지되는 시간
- index.load_fixed_bitset_filters_eagerly: (boolean) fixedBitsetFilter를 사전에 메모리에 로딩 하는지 여부를 세팅한다. fixedBitsetFilter란 es서 사용하는 내부 구조로 특정 쿼리 조건에 맞는 문서를 효율적으로 식별하기 위해 사용한다. 특히 negative query(not, does not exist, missing)에 중요한 역할을 한다. 비트셋 구조를 통해 특정조건에 맞는 문서를 1개 비트로 미리 설정해놓고, 쿼리 시 해당 비트셋을 조회 한다.
- index.shard.check_on_startup: (true|false|checksum) 엘라스틱 서치가 샤드를 오픈할 때, 추가적인 무결성 체크를 하도록 설정 한다. 엘라스틱서치는 기본적으로 라이프사이클에 따라 무결성 체크를 진행 하므로, 해당 옵션은 꼭 필요한 경우가 아니면 디폴트로 두는 것이 좋다.
Dynamic Settings
- index.number_of_replicas: (정수) 레플리카(복제본) 개수 설정 이다.
- index.auto_expand_replicas: (정수 | all) 복제본의 개수를 노드의 개수 및 알고리즘에 따라 동적으로 적용되도록 한다. (범위 설정) number_of_replicas 보다 우선 적용(무시) 된다.
- index.search.idle.after: (정수) 인덱스가 idle상태로 전환되기 까지 걸리는 시간이다. 디폴트는 30s 이고, 해당 인덱스(샤드)로 30초 동안 요청이 없다면 idle모드로 진입한다. idle모드인 경우 캐시를 정리하거나, 검색 관련 구조를 메모리에서 정리하는 등 작업을 수행한다.
- index.refresh_interval: (정수, -1일 경우 disabled) 리프레쉬 작업이 수행되는 간격을 설정한다. 리프레쉬 작업이 수행되면 인덱스에 변경 요청된 사항이 검색 가능하도록 적용 된다.
- index.max_result_window: (정수) 기본 검색 쿼리의 from + size 의 max 값이다.
- index.max_inner_result_window: (정수) nested object 필드에 대해서 inner_hits가 활성화 된 쿼리에 해당하는 from + size 의 max 값이다. 하나의 오브젝트가 여러개의 하위 오브젝트를 가진 경우 innerHits를 활성화 하여 하위 오브젝트에 대해 쿼리할 수 있는데, 해당 옵션이 10 인 경우 from + size 가 10 이상인 경우에 대한 값을 표출할 수 없다.
GET /products/_search
{
"query": {
"nested": {
"path": "reviews",
"query": {
"range": {
"reviews.rating": {
"gte": 4
}
}
},
"inner_hits": {
"from": 0,
"size": 20
}
}
}
}
위와 같은 경우 오류가 발생한다.
- index.max_rescore_window: (정수) rescore 요청에 대해 최대 window_size 이다.
rescore??
GET /documents/_search
{
"query": {
"match": {
"content": "Elasticsearch"
}
},
"rescore": {
"window_size": 50,
"query": {
"rescore_query": {
"match_phrase": {
"content": {
"query": "Elasticsearch",
"slop": 0
}
}
},
"query_weight": 0.7,
"rescore_query_weight": 1.2
}
}
}
content 에 대해 Elasticsearch 텍스트에 대한 매칭쿼리를 수행한 결과값을 토대로 상위 50개 문서에 대해 rescoring 한다.
content 가 "Elasticsearch"와 완벽히 일치하는 도큐먼트를 찾아서, rescore_query_weight에 더 높은 점수를 부여한다.
- index.max_docvalue_fields_search: (정수) docvalue_fields 로 지정할 수 있는 필드 개수를 설정한다.
docvalue_fields란?
GET /my_index/_search
{
"query": {
"match_all": {}
},
"docvalue_fields": ["title", "author", "age"]
}
해당 필드들의 데이터만 fields 필드로 받는다. _source 와 다르게 디스크에서 즉시 로딩한다.
- index.max_script_fields: (정수) script_fields로 추가할 수 있는 최대 스크립트 필드 개수이다. 스크립트 필드는 script_fields 옵션으로 요청 가능하며, 스크립팅 된 결과 값이 검색 결과의 필드로 리턴된다.
GET /my_index/_search
{
"query": {
"match_all": {}
},
"script_fields": {
"new_field": {
"script": {
"lang": "painless",
"source": "doc['field1'].value + doc['field2'].value"
}
}
}
}
- index.max_ngram_diff: NGramTokenizer와 NGramTokenFilter를 적용할 때 mingram 과 maxgram 간의 크기 차이의 max 값을 설정 한다.
- index.max_shingle_diff: shingle token filter 에 대해 min_shingle_size와 max_shingle_size 간 크기 차이의 max 값을 설정 한다.
- index.max_refresh_listener: 인덱스의 각 샤드의 refresh listener 의 최대 개수 설정이다.
- index.analyze.max_token_count: 분석기에 의한 토큰의 최대 개수 이다. 디폴트는 10000
- index.highlight.max_analyzed_offset: highlight request 요청 분석에 의한 최대 하이라이팅 글자 수 이다. 디폴트는 100000
- index.max_terms_count: term query에 사용할 수 있는 max 텀 개수 이다. 디폴트는 65536
- index.max_regex_length: 정규식 쿼리 사용 시 최대 길이 이다. 디폴트는 1000
- index.query.default_field: 와일드카드 패턴 스트링으로 해당하는 필드에 대해 기본적으로 아래 쿼리들을 수행한다.
- More like this
- multi-match
- query string
- simple query string
- index.routing.allocation.enable: 인덱스의 샤드들에 rebalancing 설정을 제어하는 옵션.
- all: 모든 샤드에 대해 리밸런싱을 허용한다.
- primaries: 프라이머리 샤드에 대해 리밸런싱을 허용한다.
- replicas: 레플리카 샤드에 대해 리밸런싱을 허용한다.
- none: 리밸런싱을 허용하지 않는다.
- index.gc_deletes: 삭제된 문서의 버전번호가 추가 버전 관련 작업에 사용될 수 있는 시간을 설정한다.
- index.hidden: 인덱스가 디폴트로 숨김처리 되어야 하는지 여부를 설정한다. 숨김처리 된 인덱스는 와일드카드 쿼리 시에 검색되지 않는다.
Settings에 들어갈 수 있는 다른 모듈
Analysis: 분석기 관련 설정
Index shard allocation: 샤드 및 노드 전략 관련 설정
Mapping: 동적 매핑 관련 설정
Merging: 샤드들의 머지 프로세싱 관련 설정
그외..
Similarities
Slowlog
Store
Translog
History retention
Index pressure
'Elasticsearch' 카테고리의 다른 글
엘라스틱서치 인덱스 Mapping 과 Properties 정리 (0) | 2023.11.14 |
---|---|
Elasticsearch Index Template (0) | 2023.11.07 |
엘라스틱 서치 노드의 종류 (0) | 2023.10.30 |