:: Index Naming Restrictions
- 모든 문자는 소문자만 가능.
- 인덱스 이름의 시작은 '_'나 '-'로 시작될 수 없음.
- 인덱스 이름은 다음의 문자열을 포함할 수 없음. ( :, ", *, +, /, \\, |, ?, #, >, or < )
Movie라는 이름을 가진 인덱스의 생성 예시
기본적으로 settings와 mappings라는 key를 가진 JSONObject로 인덱스에 대한 설정 정보를 입력한다.
// movie라는 이름을 가진 인덱스의 생성 예
PUT /movie
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"shard": {
"check_on_startup": false
}
},
"mappings": {
"properties": {
"name": {
"type": "text"
},
"year": {
"type": "integer"
},
"genre": {
"type": "keyword"
}
}
}
}
:: Settings
- Static Index Settings
인덱스 생성 시 설정하고 이후에는 변경할 수 없는 설정 값.
Key | Description |
number_of_shards | primary 샤드 수. (default 1) |
number_of_routing_shards | split index 사용을 위한 routing_shard 수 |
shard.check_on_startup | 인덱스 open 또는 close 후 open 시 corruption 체크.
|
codec | 저장된 데이터 압축 타입.
|
routing_partition_size | 사용자 지정 라우팅 값. 라우팅은 단일 샤드가 아닌 샤드의 하위 집합으로 재배치하여(파티션을 나눠) 불균형 클러스터를 처리하게 하는 속성. 이 값을 설정하려면 최소 1보다 크고 number_of_shards의 값보다 작아야 한다. (default 1) |
soft_deletes.retention_lease.period | 샤드 히스토리 유지 시간 (default 12h) |
load_fixed_bitset_filters_eagerly | 캐시된 filter들을 미리 로드할 것인지 설정.
|
hidden | 인덱스를 hide처리 할 것인지 아닌지 설정. 숨겨진 인덱스들은 와일드카드가 있는 쿼리 실행에서 return되지 않는다.
|
- Dynamic Index Settings
어느때나 수정이 가능한 설정 값.
Key | Description |
number_of_replicas | 각각의 primary shard들이 가지고 있는 replica의 수. (default 1) |
auto_expand_replicas | 클러스터가 데이터 노드의 수에 따라 자동적으로 replica를 추가 할 것인지 설정. 설정은 하한과 상한을 설정한다. ex) 0-9 또는 all 예를 들어, 5개의 데이터 노드를 가지고 있는 상황에서 auto_expand_replicas 설정 값이 0-3이라면, 클러스터는 자동적으로 또다른 replica를 추가하지 않는다. 하지만, 위와 같은 상황에서 0-all로 설정하고, 2개의 노드가 추가하여 총 7개가 되도록 한다면, 클러스터는 6개의 replica를 갖도록 확장된다. (default disabled) |
search.idle.after | 검색 또는 request에 대해 응답을 기다리는 시간. (default 30s) |
refresh_interval | 가장 최근 변경 사항을 게시하고 검색에 사용할 수 있도록 하는 인덱스 새로 고침 빈도. -1로 설정하면 disable로 설정된다. (default 1s) |
max_result_window | 인덱스 검색을 위한 ${from} + ${size}의 최대값. (결과의 최대 수) ${from}은 시작 인덱스이고 ${size}는 결과 리턴값의 총 양을 의미한다. (default 10000) 쉽게 말하면 default값으로 설정되어있는 상태에서, 페이징 시 from을 9999부터 size를 3개씩으로 설정한다면 query_phase_execution_exception: Result window is too large, from + size must be less than or equal to: [10000] but was [10002]. 위와 같은 에러가 나게된다. 이 값은 원하는대로 50000까지도 설정할 수 있는데 근본적으로 10000을 넘게 조회하게 된다면 많은 리소스 사용으로 성능문제가 발생할 수 있기 때문에 한번에 설정 값을 바꾸기 보다 10000개가 한번에 검색되지 않도록 검색조건을 잘 분할해서 지정해야 된다. 참고 기능 : scroll, search after |
max_inner_result_window | 중첩 필드에 대한 검색 결과 수 및 쿼리 중에 집계된 가장 관련성이 높은 문서를 반환하는 ${from] + ${size}의 최대값. (결과의 최대 수) ${from}은 시작 인덱스이고, ${size}는 return하는 top hits의 값이다. (default 100) 참고 : nested field, nested object, nested inner hits |
max_rescore_window | 엘라스틱서치, 오픈서치에서는 질의에서 관련 있는 문서를 점수를 통해 묶어주는 기능이있다. 점수는 찾고자 하는 질의와 문서가 얼마나 관련있는지 알 수 있는데, 보통 일반 질의에서는 문서의 점수를 계산하는 건 속도에 약간의 영향만 있을 뿐이다. 하지만 스크립트를 실행하여 스크립트가 색인의 각 문서의 점수를 계산하는 경우나, phrase 질의를 이용하여 각 단어의 거리를 지정할 때, 큰 slop을 설정하는 경우 수백/수천만건의 문서에 점수 계산 수식 영향을 줄이고 싶게 된다. 이 문제를 해결하기 위해 ' Rescoring'이라고 불리는 기능을 가지고 있다. 'Rescoring'은 초기 질의가 실행되고 응답받은 결과를 가지고 점수를 계산하는 것을 의미한다. 인덱스의 문서들의 점수 재평가 요청을 위한 windows_size의 최대값. 여기서 window_size는 rescoring에 의한 결과 개수이다. default는 max_inner_result_window값과 같거나 10000이다. |
max_docvalue_fields_search | 쿼리에서 허용된 docvalue_field 수의 최대값. (default 100) |
max_script_fields | 쿼리에서 허용된 script_field 수의 최대값. (default 32) |
max_ngram_diff | NGramTokenizer와 NGramTokenFilter의 min_gram과 max_gram 값 사이의 최대 차. (default 1) |
max_shingle_diff | shingle token filter에 공급할 max_shingle_size와 min_shingle_size의 최대 차. (default 3) |
max_refresh_listeners | 각각의 샤드에서 허용된 refresh_listener의 최대 수. |
analyze.max_token_count | _analyze API에서 반환할 수 있는 토큰들의 최대 수. (default 10000) |
highlight.max_analyzed_offset | highlight 요청이 분석할 수 있는 문자의 수. (default 1000000) |
max_terms_count | terms 질의가 받아들일 수 있는 최대 검색어 수. (default 65536) |
max_regex_length | regexp 질의에서 regex 문자 길이의 최대 수. (default 1000) |
query.default_field | 쿼리 파라미터에 필드가 지정되지 않은 경우 default로 사용하는 필드 또는 필드 목록. |
routing.allocation.enable | 인덱스의 샤드 할당에 대한 옵션.
|
routing.rebalance.enable | 인덱스에 대한 샤드 재조정을 활성화합니다.
|
gc_deletes | 삭제된 문서의 버전 번호를 유지하는 기간. (default 60s) |
default_pipeline | 인덱스의 기본 수집 파이프라인. 기본 파이프라인이 설정되어 있고 파이프라인이 없으면 인덱스 요청이 실패합니다. _none은 인덱스에 수집 파이프라인이 없음을 지정합니다. |
final_pipeline | 인덱스에 대한 최종 수집 노드 파이프라인. 최종 파이프라인이 설정되고 파이프라인이 존재하지 않으면 인덱스 요청이 실패합니다. _none은 인덱스에 수집 파이프라인이 없음을 지정합니다. |
:: Mappings
- Dynamic Mapping Types
Type | Description |
null | |
boolean | |
float | |
double | |
integer | |
object | standard JSON object |
array | |
text | full-text value. String. |
keyword | email이나 ZIP code 같은 구조화된 문자. |
date detection string | 문자열이 date format일 경우, 자동으로 date field로 인식한다. default enabled. |
numeric detection string | 문자열이 숫자일 경우 자동으로 number로 인식한다. disabled이면 무조건 문자열로 인식한다. default disabled. |
반응형
'OpenSearch (ElasticSearch)' 카테고리의 다른 글
[6] 데이터 스트림 (0) | 2022.02.25 |
---|---|
[5] 인덱스 별칭 (aliases) (0) | 2022.02.22 |
[4] 인덱스 데이터 (0) | 2022.02.18 |
[2] Opensearch와 클러스터 설정 (0) | 2022.02.14 |
[1] OpenSearch란? Opensearch와 일반 RDB 비교 (0) | 2022.02.12 |