본문 바로가기
OpenSearch (ElasticSearch)

[3] 인덱스 생성과 설정 예제

by parkjp 2022. 2. 17.

:: 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 체크.
  • false (체크하지 않음)
  • checksum (물리적 corruption 체크)
  • true (물리적, 논리적 체크)
(default false)
codec 저장된 데이터 압축 타입.
  • best_compression
  • default
routing_partition_size 사용자 지정 라우팅 값.
라우팅은 단일 샤드가 아닌 샤드의 하위 집합으로 재배치하여(파티션을 나눠) 불균형 클러스터를 처리하게 하는 속성.
이 값을 설정하려면 최소 1보다 크고 number_of_shards의 값보다 작아야 한다.
(default 1)
soft_deletes.retention_lease.period 샤드 히스토리 유지 시간 (default 12h)
load_fixed_bitset_filters_eagerly 캐시된 filter들을 미리 로드할 것인지 설정.
  • true
  • false
(default true)
hidden 인덱스를 hide처리 할 것인지 아닌지 설정.
숨겨진 인덱스들은 와일드카드가 있는 쿼리 실행에서 return되지 않는다.
  • true
  • false
(default false)

 

 

-  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 인덱스의 샤드 할당에 대한 옵션.
  • all (모든 샤드에 대한 할당 허용)
  • primary (기본 샤드에만 할당 허용)
  • new_primaries (새 기본 샤드에 대해서만 할당 허용)
  • none (할당 안함)
(default all)
routing.rebalance.enable 인덱스에 대한 샤드 재조정을 활성화합니다.
  • all (모든 샤드에 대해 재조정 허용)
  • primaries (기본 샤드에 대해서만 재조정 허용)
  • replicas (복제본에 대해서만 재조정 허용)
  • none (재조정을 허용하지 않음)
(default all)
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