본문 바로가기
WIKI 기술 지식 베이스

Index settings

원문 보기 위키 갱신

출처: 문서

본문

인덱스 설정

인덱스 설정은 개별 인덱스에 적용되며, 이름은 index.로 시작합니다. 클러스터의 모든 인덱스에 적용되는 클러스터 설정에 대해서는 인덱스용 클러스터 설정을 참조하세요.

인덱스를 생성할 때 인덱스 설정을 지정합니다. 인덱스 설정은 정적 또는 동적일 수 있습니다. 다음 표에서는 각 설정 유형을 업데이트할 수 있는 시기와 방법을 설명합니다.

설정 유형 업데이트 가능 시기 업데이트 방법
정적 인덱스가 닫혀 있을 때 인덱스를 닫고, 업데이트 인덱스 설정 API를 사용하여 설정을 업데이트한 후 인덱스를 다시 엽니다. 자세한 내용은 정적 인덱스 설정 업데이트를 참조하세요.
동적 언제든지 업데이트 인덱스 설정 API를 사용합니다. 자세한 내용은 동적 인덱스 설정 업데이트를 참조하세요.

인덱스 생성 시 설정 지정

인덱스를 생성할 때 정적 또는 동적 설정을 다음과 같이 지정할 수 있습니다:

PUT /testindex
{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 2
  }
}

{% include copy-curl.html %}

정적 인덱스 설정 업데이트

정적 인덱스 설정은 닫힌 인덱스에서만 업데이트할 수 있습니다. 다음 예제는 인덱스 코덱 설정을 업데이트하는 방법을 보여줍니다.

먼저 인덱스를 닫습니다:

POST /testindex/_close

{% include copy-curl.html %}

그런 다음 _settings 엔드포인트로 요청을 보내 설정을 업데이트합니다:

PUT /testindex/_settings
{
  "index": {
    "codec": "zstd_no_dict",
    "codec.compression_level": 3
  }
}

{% include copy-curl.html %}

마지막으로 인덱스를 다시 열어 읽기 및 쓰기 작업을 활성화합니다:

POST /testindex/_open

{% include copy-curl.html %}

지원되는 쿼리 매개변수를 포함한 설정 업데이트에 대한 자세한 내용은 설정 업데이트를 참조하세요.

동적 인덱스 설정 업데이트

동적 인덱스 설정은 API를 통해 언제든지 업데이트할 수 있습니다. 예를 들어, 새로고침 간격을 업데이트하려면 다음 요청을 사용합니다:

PUT /testindex/_settings
{
  "index": {
    "refresh_interval": "2s"
  }
}

{% include copy-curl.html %}

지원되는 쿼리 매개변수를 포함한 설정 업데이트에 대한 자세한 내용은 설정 업데이트를 참조하세요.

정적 인덱스 설정

정적 인덱스 설정은 닫힌 인덱스에서만 업데이트할 수 있는 설정입니다. 일부 정적 인덱스 설정은 최종 설정입니다. 최종 설정은 인덱스를 생성할 때만 지정할 수 있으며, 이후에는 닫힌 인덱스에서도 업데이트할 수 없습니다.

OpenSearch는 다음과 같은 정적 인덱스 설정을 지원합니다:

  • index.number_of_shards (Final, integer): 인덱스의 기본 샤드 수입니다. 기본값은 1입니다.

  • index.number_of_routing_shards (Static, integer): 인덱스를 분할하는 데 사용되는 라우팅 샤드 수입니다.

  • index.shard.check_on_startup (Static, Boolean): 인덱스의 샤드에 손상이 있는지 확인해야 하는지 여부입니다. 사용 가능한 옵션은 false (손상 확인 안 함), checksum (물리적 손상 확인), true (물리적 및 논리적 손상 모두 확인)입니다. 기본값은 false입니다.

  • index.codec (Static, string): 인덱스의 저장된 필드가 디스크에 압축 및 저장되는 방식을 결정합니다. 이 설정은 인덱스 샤드의 크기와 인덱스 작업의 성능에 영향을 미칩니다.

    유효한 값은 다음과 같습니다:

    • default
    • best_compression
    • zstd (OpenSearch 2.9 이상)
    • zstd_no_dict(OpenSearch 2.9 이상)
    • qat_lz4 (OpenSearch 2.14 이상, 지원되는 시스템에서)
    • qat_deflate (OpenSearch 2.14 이상, 지원되는 시스템에서)
    • qat_zstd (OpenSearch 2.19.3 이상, 지원되는 시스템에서)

zstd, zstd_no_dict, qat_lz4, qat_deflate 및 qat_zstd의 경우 index.codec.compression_level 설정에서 압축 수준을 지정할 수 있습니다. 자세한 내용은 인덱스 코덱 설정을 참조하세요. 선택 사항입니다. 기본값은 default입니다.

  • index.codec.compression_level (Static, integer): 압축 수준 설정은 압축률과 속도 간의 균형을 제공합니다. 압축 수준이 높을수록 압축률이 높아지지만(저장 공간 감소), 압축 및 해제 속도가 느려져 인덱싱 및 검색 지연 시간이 증가합니다. 이 설정은 OpenSearch 2.9 이상에서 index.codec가 zstd 또는 zstd_no_dict로 설정된 경우, OpenSearch 2.14 이상에서 qat_lz4 또는 qat_deflate로 설정된 경우, 또는 OpenSearch 2.19.3 이상에서 qat_zstd로 설정된 경우에만 지정할 수 있습니다. 유효한 값은 [1, 6] 범위의 정수입니다. 자세한 내용은 인덱스 코덱 설정을 참조하세요. 선택 사항입니다. 기본값은 3입니다.

  • index.routing_partition_size (Static, integer): 사용자 지정 라우팅 값이 이동할 수 있는 샤드 수입니다. 라우팅은 값을 단일 샤드가 아닌 샤드 하위 집합으로 재배치하여 불균형한 클러스터를 지원합니다. 라우팅을 활성화하려면 이 값을 1보다 크고 index.number_of_shards보다 작게 설정합니다. 기본값은 1입니다.

  • index.sort.field (Final, string): 인덱스 시간에 문서를 정렬하는 데 사용되는 필드를 지정합니다. 기본 정렬 순서는 asc(오름차순)입니다. 순서를 변경하려면 index.sort.order 매개변수를 설정합니다.

  • index.sort.order (Final, string): 인덱스 시간에 문서 정렬 순서를 지정합니다. 유효한 값은 asc(오름차순) 및 desc(내림차순)입니다. 기본값은 asc입니다. 이 설정을 사용하려면 index.sort.field도 설정해야 합니다.

  • index.sort.mode (Final, string): 정렬 중 다중 값 필드가 처리되는 방식을 제어합니다. 유효한 값은 min(가장 낮은 값 사용) 및 max(가장 높은 값 사용)입니다.

  • index.sort.missing (Final, string): 정렬 필드가 없는 문서가 처리되는 방식을 결정합니다. 유효한 값은 _last(필드가 없는 문서를 끝에 배치) 및 _first(필드가 없는 문서를 시작 부분에 배치)입니다.

  • index.load_fixed_bitset_filters_eagerly (Static, Boolean): OpenSearch가 캐시된 필터를 미리 로드해야 하는지 여부입니다. 사용 가능한 옵션은 true 및 false입니다. 기본값은 true입니다.

  • index.queries.cache.enabled (Static, Boolean): 인덱스에 대한 쿼리 캐시를 활성화하거나 비활성화합니다. 쿼리 캐시는 각 데이터 노드에서 자주 사용되는 필터의 결과를 저장합니다. 쿼리 캐시의 크기를 구성하려면 노드 수준 indices.queries.cache.size 설정을 사용합니다. 기본값은 true입니다.

  • index.query.parse.allow_unmapped_fields (Static, Boolean): 쿼리 구문 분석에서 매핑되지 않은 필드를 허용합니다. 기본값은 true입니다.

  • index.query_string.lenient (Static, Boolean): 쿼리 문자열에 대해 관대한 구문 분석을 활성화합니다. 기본값은 false입니다.

  • index.store.type (Static, string): OpenSearch가 인덱스의 샤드 데이터를 디스크에 저장하고 읽는 데 사용하는 파일 시스템 구현입니다. 유효한 값은 다음과 같습니다:

    • fs: OpenSearch가 운영 환경에 맞는 구현을 선택합니다. 메모리 매핑이 허용되는 64비트 시스템에서는 hybridfs를 사용하고, 그렇지 않으면 niofs를 사용합니다.
    • hybridfs: 메모리 매핑을 사용하여 대부분의 인덱스 파일을 읽고, index.store.hybrid.nio.extensions 설정에 나열된 파일 유형을 Java NIO를 사용하여 읽습니다.
    • mmapfs: 메모리 매핑을 사용하여 모든 인덱스 파일을 읽습니다. 메모리 매핑은 파일 크기에 비례하여 가상 주소 공간을 사용하므로 운영 체제에서 충분한 메모리 맵 영역을 허용하는지 확인하세요.
    • niofs: 메모리 매핑 없이 Java NIO를 사용하여 모든 인덱스 파일을 읽습니다.

    node.store.allow_mmap 설정을 사용하여 메모리 매핑이 비활성화된 경우 OpenSearch는 hybridfs 및 mmapfs 값을 거부합니다. 기본값은 fs입니다.

  • index.store.stats_refresh_interval (Static, time unit): 인덱스 저장소 통계의 새로고침 간격입니다. 기본값은 10s입니다.

  • index.check_pending_flush.enabled (Static, Boolean): 이 설정은 Apache Lucene checkPendingFlushOnUpdate 인덱스 라이터 설정을 제어합니다. 이 설정은 인덱싱 스레드가 업데이트 시 보류 중인 플러시를 확인하여 인덱싱 버퍼를 디스크에 플러시해야 하는지 여부를 지정합니다. 기본값은 true입니다.

  • index.use_compound_file (Static, Boolean): 이 설정은 Apache Lucene useCompoundFile 인덱스 라이터 설정을 제어합니다. 이 설정은 새로 작성된 세그먼트 파일이 복합 파일로 압축될지 여부를 지정합니다. 기본값은 true입니다.

  • index.append_only.enabled (Final, Boolean): 인덱스의 문서에 대한 업데이트를 방지하려면 true로 설정합니다. 기본값은 false입니다.

  • index.derived_source.enabled (Final, Boolean): _source 필드를 명시적으로 저장하지 않고 소스를 동적으로 생성하려면 true로 설정합니다. 이렇게 하면 저장 공간을 최적화할 수 있습니다. 기본값은 false입니다. 자세한 내용은 파생 소스를 참조하세요.

  • index.mapping.ignore_malformed (Static, Boolean): 문서 구문 분석 중에 잘못된 형식의 필드를 무시할지 여부를 제어합니다. 활성화되면 잘못된 형식의 필드 값이 있는 문서가 성공적으로 인덱싱되며, 잘못된 형식의 필드는 필드 유형에 따라 무시되거나 null로 설정됩니다. 비활성화되면 잘못된 형식의 필드가 있는 문서가 거부됩니다. 이 설정은 필드 수준에서 재정의할 수 있는 기본 동작을 제공합니다. 기본값은 false입니다.

  • index.soft_deletes.enabled (Final, Boolean): 인덱스에 대한 소프트 삭제를 활성화합니다. 활성화되면 삭제된 문서가 즉시 제거되지 않고 삭제된 것으로 표시되어 복구 및 복제 성능이 향상됩니다. 이 설정은 OpenSearch 2.0+ 인덱스에 필수이며 레거시 인덱스에서는 기본적으로 활성화됩니다. 한 번 설정하면 인덱스 생성 후 변경할 수 없습니다. 기본값은 true입니다.

  • index.store.preload (Static, list): 인덱스가 열릴 때 파일 시스템 캐시에 미리 로드해야 할 파일 확장자를 지정합니다. 이 설정은 mmap 디렉터리 구현에서만 작동하며 최선의 캐싱을 제공합니다. 파일을 미리 로드하면 디스크 I/O를 줄여 검색 성능을 향상시킬 수 있지만 더 많은 메모리를 소비합니다. 일반적인 확장자로는 nvd(norm), dvd(doc values), tim(terms index) 등이 있습니다. 기본값은 [](빈 목록)입니다.

  • index.replication.type (Final, string): 인덱스에 사용되는 복제 전략을 정의합니다. 유효한 값은 다음과 같습니다:

    • DOCUMENT: 개별 문서가 복제되는 전통적인 문서 기반 복제
    • SEGMENT: 성능 향상 및 네트워크 오버헤드 감소를 위한 세그먼트 기반 복제 이 설정은 인덱스 생성 중에 구성해야 하며 이후에는 변경할 수 없습니다. 기본값은 DOCUMENT입니다.

  • index.merge.policy (Static, string): Lucene 세그먼트가 병합되는 방식을 제어하는 병합 정책을 선택합니다. 유효한 값은 tiered, log_byte_size 및 default입니다. default 값은 표준 인덱스의 경우 tiered로 확인됩니다. OpenSearch가 @timestamp 필드의 존재로 식별하는 시계열 인덱스의 경우 default는 노드 수준 indices.time_series_index.default_index_merge_policy 설정으로 지정된 정책으로 확인됩니다. 기본값은 default입니다. 로그 이벤트와 같은 시계열 데이터의 경우 log_byte_size를 권장합니다. 이는 @timestamp 필드에 대한 범위 쿼리의 쿼리 성능을 향상시킬 수 있습니다. 선택한 정책을 구성하려면 병합 설정을 사용합니다.

동적 인덱스 설정

동적 인덱스 설정은 언제든지 업데이트할 수 있는 설정입니다.

OpenSearch는 다음과 같은 동적 인덱스 설정을 지원합니다.

  • index.codec.qatmode (Dynamic, string): qat_lz4, qat_deflate, qat_zstd 압축 코덱에 사용되는 하드웨어 가속 모드입니다. 유효한 값은 auto와 hardware입니다. 자세한 내용은 인덱스 코덱 설정을 참조하세요. 선택 사항입니다. 기본값은 auto(권장 설정)입니다.

  • index.hidden (Dynamic, Boolean): 인덱스를 숨길지 여부를 지정합니다. 숨겨진 인덱스는 와일드카드가 포함된 쿼리의 결과로 반환되지 않습니다. 사용 가능한 옵션은 true와 false입니다. 기본값은 false입니다.

  • index.soft_deletes.retention_lease.period (Dynamic, time unit): 샤드의 작업 기록을 보존하는 최대 시간입니다. 기본값은 12h입니다.

  • index.bulk.adaptive_shard_selection.enabled (Dynamic, Boolean): true로 설정하면 대량 작업에 대해 적응형 샤드 선택을 활성화하여 추가 전용 인덱스에 대해 단일 샤드가 선택됩니다. 기본값은 false입니다. 자세한 내용은 대량 인덱싱을 위한 적응형 샤드 선택을 참조하세요.

  • index.number_of_replicas (Dynamic, integer): 각 기본 샤드가 가져야 하는 복제본 샤드의 수입니다. 예를 들어, 기본 샤드가 4개이고 index.number_of_replicas를 3으로 설정하면 인덱스는 12개의 복제본 샤드를 갖습니다. 설정하지 않으면 기본값은 cluster.default_number_of_replicas(기본값은 1)입니다.

  • index.number_of_search_replicas (Dynamic, integer): 각 기본 샤드가 가져야 하는 검색 복제본 샤드의 수입니다. 예를 들어, 기본 샤드가 4개이고 index.number_of_search_replicas를 3으로 설정하면 인덱스는 12개의 검색 복제본 샤드를 갖습니다. 기본값은 0입니다.

  • index.auto_expand_replicas (Dynamic, string): 클러스터가 데이터 노드 수에 따라 자동으로 복제본 샤드를 추가할지 여부를 지정합니다. 하한과 상한(예: 0--9)을 지정하거나 상한에 all을 지정합니다. 예를 들어, 데이터 노드가 5개이고 index.auto_expand_replicas를 0--3으로 설정하면 클러스터는 자동으로 다른 복제본 샤드를 추가하지 않습니다. 그러나 이 값을 0-all로 설정하고 노드를 2개 더 추가하여 총 7개가 되면 클러스터는 6개의 복제본 샤드를 갖도록 확장됩니다. 기본값은 비활성화입니다.

  • index.auto_expand_search_replicas (Dynamic, string): 클러스터가 사용 가능한 검색 노드 수에 따라 검색 복제본 샤드 수를 자동으로 조정할지 여부를 제어합니다. 값을 하한과 상한이 있는 범위로 지정합니다(예: 0-3 또는 0-all). 값을 지정하지 않으면 이 기능이 비활성화됩니다.

    예를 들어, 데이터 노드가 5개이고 index.auto_expand_search_replicas를 0-3으로 설정하면 인덱스는 최대 3개의 검색 복제본을 가질 수 있으며 클러스터는 자동으로 다른 검색 복제본 샤드를 추가하지 않습니다. 그러나 index.auto_expand_search_replicas를 0-all로 설정하고 노드를 2개 더 추가하여 총 7개가 되면 클러스터는 7개의 검색 복제본 샤드를 갖도록 확장됩니다. 이 설정은 기본적으로 비활성화되어 있습니다.

  • index.blocks.write (Dynamic, Boolean): 인덱스가 읽기 전용인지 여부를 지정합니다. true로 설정하면 모든 쓰기 요청이 차단되고 인덱스가 읽기 전용이 됩니다. 기본값은 false입니다.

  • index.search.idle.after (Dynamic, time unit): 샤드가 유휴 상태가 될 때까지 검색 또는 가져오기 요청을 기다리는 시간입니다. 기본값은 30s입니다.

  • index.search.default_pipeline (Dynamic, string): 인덱스를 검색할 때 명시적으로 파이프라인이 설정되지 않은 경우 사용되는 검색 파이프라인의 이름입니다. 기본 파이프라인이 설정되어 있지만 파이프라인이 존재하지 않으면 인덱스 요청이 실패합니다. 파이프라인 이름 _none을 사용하여 기본 검색 파이프라인이 없음을 지정합니다. 자세한 내용은 기본 검색 파이프라인을 참조하세요.

  • index.refresh_interval (Dynamic, time unit): 인덱스가 새로 고쳐지는 빈도로, 가장 최근 변경 사항을 게시하여 검색에 사용할 수 있게 합니다. -1로 설정하면 새로 고침을 비활성화할 수 있습니다. 기본값은 1s입니다.

    이 설정을 명시적으로 설정하지 않으면 index.search.idle.after에 지정된 기간 동안 검색 요청을 받지 않은 샤드는 다음 검색 요청이 도착할 때까지 백그라운드에서 새로 고침을 중지합니다. 이는 검색되지 않는 인덱스에 대한 대량 인덱싱을 최적화합니다. 검색 트래픽과 관계없이 고정된 일정으로 새로 고치려면 index.refresh_interval을 명시적으로 1s로 설정하세요. 자세한 내용은 새로 고침 간격을 참조하세요.

  • index.max_result_window (Dynamic, integer): 인덱스 검색 시 from + size의 최대값입니다. from은 검색을 시작할 시작 인덱스이고, size는 반환할 결과 수입니다. 기본값은 10000입니다.

  • index.max_inner_result_window (Dynamic, integer): 반환되는 중첩 검색 결과 수와 쿼리 중 집계된 가장 관련성 높은 문서 수를 지정하는 from + size의 최대값입니다. from은 검색을 시작할 시작 인덱스이고, size는 반환할 상위 결과 수입니다. 기본값은 100입니다.

  • index.max_rescore_window (Dynamic, integer): 인덱스에 대한 재점수 요청의 window_size 최대값입니다. 재점수 요청은 인덱스의 문서를 재정렬하고 더 정확할 수 있는 새 점수를 반환합니다. 기본값은 index.max_inner_result_window와 동일하거나 기본적으로 10000입니다.

  • index.max_docvalue_fields_search (Dynamic, integer): 쿼리에서 허용되는 docvalue_fields의 최대 개수입니다. 기본값은 100입니다.

  • index.max_script_fields (Dynamic, integer): 쿼리에서 허용되는 script_fields의 최대 개수입니다. 기본값은 32입니다.

  • index.max_ngram_diff (Dynamic, integer): NGramTokenizer 및 NGramTokenFilter에 대한 min_gram과 max_gram 값의 최대 차이입니다. 기본값은 1입니다.

  • index.max_shingle_diff (Dynamic, integer): shingle 토큰 필터에 입력할 max_shingle_size와 min_shingle_size의 최대 차이입니다. 기본값은 3입니다.

  • index.max_refresh_listeners (Dynamic, integer): 각 샤드가 가질 수 있는 최대 새로 고침 리스너 수입니다.

  • index.analyze.max_token_count (Dynamic, integer): _analyze API 작업에서 반환할 수 있는 최대 토큰 수입니다. 기본값은 10000입니다.

  • index.highlight.max_analyzed_offset (Dynamic, integer): 하이라이트 요청이 분석할 수 있는 문자 수입니다. 기본값은 1000000입니다.

  • index.max_terms_count (Dynamic, integer): terms 쿼리가 허용할 수 있는 최대 용어 수입니다. 기본값은 65536입니다.

  • index.max_regex_length (Dynamic, integer): regexp 쿼리에 포함될 수 있는 정규식의 최대 문자 길이입니다. 기본값은 1000입니다.

  • index.query.default_field (Dynamic, list): 매개변수에 필드가 지정되지 않은 경우 OpenSearch가 쿼리에서 사용하는 필드 또는 필드 목록입니다.

  • index.query.max_nested_depth (Dynamic, integer): nested 쿼리의 최대 중첩 수준 수입니다. 기본값은 20입니다. 최소값은 1(단일 nested 쿼리)입니다.

  • index.requests.cache.enable (Dynamic, Boolean): 인덱스 요청 캐시를 활성화하거나 비활성화합니다. 기본값은 true입니다. 자세한 내용은 인덱스 요청 캐시를 참조하세요.

  • index.routing.allocation.enable (Dynamic, string): 인덱스의 샤드 할당에 대한 옵션을 지정합니다. 사용 가능한 옵션은 all(모든 샤드에 할당 허용), primaries(기본 샤드에만 할당 허용), new_primaries(새 기본 샤드에만 할당 허용), none(할당 허용 안 함)입니다. 기본값은 all입니다.

  • index.unassigned.node_left.delayed_timeout (Dynamic, time unit): 노드가 클러스터를 떠나서 할당되지 않은 복제본 샤드를 할당하기 전에 OpenSearch가 대기하는 시간을 설정합니다. 이 설정은 클러스터 수준의 cluster.routing.allocation.unassigned.node_left.delayed_timeout 설정을 재정의합니다. 두 설정이 모두 구성되지 않은 경우 기본값은 1m입니다. 0으로 설정하면 인덱스에 대한 지연 할당이 비활성화됩니다.

  • index.priority (Dynamic, integer): 클러스터 재시작 후와 같이 OpenSearch가 할당되지 않은 샤드를 할당할 때 인덱스의 우선순위입니다. OpenSearch는 시스템 인덱스의 샤드를 먼저 할당한 다음 index.priority가 더 높은 인덱스의 샤드를 더 낮은 인덱스의 샤드보다 먼저 할당합니다. 동일한 우선순위를 가진 인덱스는 생성 날짜 순(최신순)으로 할당된 다음 인덱스 이름순으로 할당됩니다. 0 이상이어야 합니다. 기본값은 1입니다.

  • index.routing.rebalance.enable (Dynamic, string): 인덱스에 대한 샤드 리밸런싱을 활성화합니다. 사용 가능한 옵션은 all(모든 샤드에 리밸런싱 허용), primaries(기본 샤드에만 리밸런싱 허용), replicas(복제본에만 리밸런싱 허용), none(리밸런싱 허용 안 함)입니다. 기본값은 all입니다.

  • index.gc_deletes (Dynamic, time unit): 삭제된 문서의 버전 번호를 보존하는 시간입니다. 기본값은 60s입니다.

  • index.default_pipeline (Dynamic, string): 인덱스의 기본 수집 노드 파이프라인입니다. 기본 파이프라인이 설정되어 있지만 파이프라인이 존재하지 않으면 인덱스 요청이 실패합니다. 파이프라인 이름 _none은 인덱스에 수집 파이프라인이 없음을 지정합니다.

  • index.final_pipeline (Dynamic, string): 인덱스의 최종 수집 노드 파이프라인입니다. 최종 파이프라인이 설정되어 있지만 파이프라인이 존재하지 않으면 인덱스 요청이 실패합니다. 파이프라인 이름 _none은 인덱스에 수집 파이프라인이 없음을 지정합니다.

  • index.optimize_doc_id_lookup.fuzzy_set.enabled (Dynamic, Boolean): 이 설정은 추가 데이터 구조(이 경우 Bloom 필터 데이터 구조)를 사용하여 인덱스 또는 검색 호출에서 문서 ID 조회를 최적화하기 위해 fuzzy_set을 활성화할지 여부를 제어합니다. 이 설정을 활성화하면 새 데이터 구조(Bloom 필터)를 생성하여 문서 ID에 의존하는 업서트 및 검색 작업의 성능이 향상됩니다. Bloom 필터는 더 빠른 오프힙 조회를 통해 부정적인 경우(즉, 기존 인덱스에 ID가 없는 경우)를 처리할 수 있습니다. Bloom 필터를 생성하려면 인덱싱 시간에 추가 힙 사용이 필요합니다. 기본값은 false입니다.

  • index.optimize_doc_id_lookup.fuzzy_set.false_positive_probability (Dynamic, double): 기본 fuzzy_set(즉, Bloom 필터)의 오탐(false-positive) 확률을 설정합니다. 오탐 확률이 낮을수록 업서트 및 가져오기 작업의 처리량이 높아지지만 스토리지 및 메모리 사용량이 증가합니다. 허용되는 값은 0.01에서 0.50 사이입니다. 기본값은 0.20입니다.

  • index.routing.allocation.total_shards_per_node (Dynamic, integer): 단일 인덱스에서 단일 노드에 할당할 수 있는 기본 및 복제본 샤드의 최대 총 개수입니다. 기본값은 -1(무제한)입니다. 노드당 샤드 수를 제한하여 노드 간 인덱스별 샤드 분포를 제어하는 데 도움이 됩니다. 노드가 구성된 제한에 도달하면 이 인덱스의 샤드가 할당되지 않은 상태로 남을 수 있으므로 주의해서 사용하세요.

  • index.routing.allocation.total_primary_shards_per_node (Dynamic, integer): 단일 인덱스에서 단일 노드에 할당할 수 있는 기본 샤드의 최대 개수입니다. 이 설정은 원격 지원 클러스터에만 적용됩니다. 기본값은 -1(무제한)입니다. 노드당 기본 샤드 수를 제한하여 노드 간 인덱스별 기본 샤드 분포를 제어하는 데 도움이 됩니다. 노드가 구성된 제한에 도달하면 이 인덱스의 기본 샤드가 할당되지 않은 상태로 남을 수 있으므로 주의해서 사용하세요.

  • index.derived_source.translog.enabled (Dynamic, Boolean): 파생 소스가 활성화된 인덱스에 대해 트랜스로그에서 문서를 읽는 방법을 제어합니다. 기본값은 index.derived_source.enabled 값입니다. 자세한 내용은 파생 소스를 참조하세요.

  • index.flush_after_merge (Dynamic, byte unit): 병합 작업 후 플러시할 크기(바이트)입니다. 기본값은 512MB입니다.

  • index.max_slices_per_pit (Dynamic, integer): 특정 시점 검색당 최대 슬라이스 수입니다. 기본값은 1024입니다.

  • index.unreferenced_file_cleanup.enabled (Dynamic, Boolean): 참조되지 않는 인덱스 파일의 정리를 활성화합니다. 기본값은 true입니다.

  • index.warmer.enabled (Dynamic, Boolean): 인덱스 워머 기능을 활성화합니다. 기본값은 true입니다.

  • index.allocation.max_retries (Dynamic, integer): 샤드 할당을 포기하기 전에 재시도할 수 있는 최대 횟수입니다. 이 설정은 리소스 제약이나 다른 문제로 인해 샤드를 할당할 수 없을 때 무한 할당 재시도 루프를 방지합니다. 기본값은 5입니다. 범위는 0부터 Integer.MAX_VALUE까지입니다.

  • index.max_adjacency_matrix_filters (Dynamic, integer): 집계에서 허용되는 인접 행렬 필터의 최대 개수예요. 인접 행렬 집계는 서로 다른 필터 간의 관계를 분석해요. 값이 높을수록 더 복잡한 관계 분석이 가능하지만 더 많은 메모리를 소모해요. 기본값은 100이고 최소값은 2예요.

  • index.max_slices_per_scroll (Dynamic, integer): 이 인덱스의 스크롤 요청당 허용되는 슬라이스 최대 개수예요. 슬라이싱을 사용하면 스크롤 작업을 여러 슬라이스로 병렬화하여 성능을 향상시킬 수 있어요. 값이 높을수록 더 많은 병렬화가 가능하지만 더 많은 리소스를 소모해요. 기본값은 1024이고 최소값은 1이에요.

  • index.optimize_auto_generated_id (Dynamic, Boolean): 자동 생성된 ID를 가진 문서에 대한 최적화를 활성화해요. 활성화하면 OpenSearch가 사용자 지정 ID 대신 자동 생성된 문서 ID를 사용하는 문서의 인덱싱 성능을 최적화할 수 있어요. 이 최적화는 즉시 적용되지 않을 수 있으며 엔진 상태에 따라 달라져요. 기본값은 true예요.

  • index.translog.generation_threshold_size (Dynamic, byte unit): 새 트랜스로그 세대 생성을 트리거하는 크기 임계값이에요. 현재 트랜스로그 세대가 이 크기에 도달하면 OpenSearch가 새 세대 파일을 생성해요. 값이 클수록 세대 전환 빈도가 줄어들어 인덱싱 성능이 향상될 수 있지만 복구 시간이 늘어날 수 있어요. 기본값은 64MB이고 최소값은 64KB예요.

  • index.translog.durability (Dynamic, string): 트랜스로그를 디스크에 fsync하고 커밋하는 시점을 제어해요. 유효한 값은 request와 async예요. request로 설정하면 OpenSearch는 인덱스, 삭제, 업데이트 또는 벌크 요청을 승인하기 전에 기본 샤드와 모든 할당된 복제본에서 트랜스로그를 fsync하고 커밋해요. 따라서 승인된 모든 쓰기는 노드 장애 시에도 유지돼요. async로 설정하면 OpenSearch는 index.translog.sync_interval에 설정된 간격으로 백그라운드에서 fsync하고 커밋해요. 이렇게 하면 인덱싱 오버헤드는 줄어들지만 노드 장애 시 마지막 커밋 이후 승인된 쓰기가 손실될 수 있어요. 값은 대소문자를 구분하지 않아요. 기본값은 request예요.

  • index.translog.sync_interval (Dynamic, time unit): 트랜스로그를 디스크에 fsync하고 커밋하는 빈도예요. 더 자주 동기화하면 내구성이 향상되지만 인덱싱 성능에 영향을 줄 수 있어요. 덜 자주 동기화하면 성능은 향상되지만 장애 시 데이터 손실 위험이 증가해요. 기본값은 5s이고 최소값은 100ms예요.

  • index.translog.flush_threshold_size (Dynamic, byte unit): 아직 Lucene에 커밋되지 않은 트랜스로그 작업의 최대 총 크기예요. 트랜스로그가 이 크기에 도달하면 OpenSearch가 인덱스를 플러시하여 새 Lucene 커밋 포인트를 생성하고 새 트랜스로그 세대를 시작해요. 값이 작을수록 재생해야 할 작업이 적어 복구 시간이 단축되지만 플러시가 더 자주 발생해요. 기본값은 512mb이고 최소값은 56b예요.

  • index.translog.retention.age (Dynamic, time unit): 작업 기반 피어 복구를 위해 보관할 트랜스로그 파일의 최대 보존 기간이에요. 이 설정보다 오래된 트랜스로그 파일은 트랜스로그 정리 중에 삭제돼요. 이 설정은 소프트 삭제가 비활성화된 인덱스에만 적용돼요. OpenSearch 2.0 이상에서 생성된 모든 인덱스는 소프트 삭제가 필수이므로 이 설정은 현재 인덱스에 영향을 미치지 않아요. 기본값은 -1(보존 비활성화)이에요.

  • index.translog.retention.size (Dynamic, byte unit): 작업 기반 피어 복구를 위해 보관할 트랜스로그 파일의 최대 총 크기예요. 총 크기가 이 임계값을 초과하면 정리 중에 오래된 파일이 삭제돼요. index.translog.retention.age와 마찬가지로 이 설정은 소프트 삭제가 비활성화된 인덱스에만 적용되므로 OpenSearch 2.0 이상에서 생성된 인덱스에는 영향을 미치지 않아요. 기본값은 -1(보존 비활성화)이에요.

  • index.soft_deletes.retention.operations (Dynamic, long): 인덱스에 보관할 소프트 삭제된 작업의 최대 개수예요. 소프트 삭제는 문서를 즉시 제거하지 않고 삭제된 것으로 표시하여 효율적인 복제 및 특정 시점 복구를 가능하게 해요. 이 설정은 정리 대상이 되기 전에 보존되는 소프트 삭제 작업의 수를 제어해요. 기본값은 0(무제한 보존)이에요.

  • index.remote_store.translog.keep_extra_gen (Dynamic, integer): 복구에 필요한 최소 세대 외에 원격 저장소에 추가로 보관할 트랜스로그 세대 수예요. 값이 높을수록 더 많은 복구 옵션을 제공하지만 더 많은 저장 공간을 소모해요. 이 설정은 원격 저장소 구성에서 저장 비용과 복구 유연성 간의 균형을 맞추는 데 도움을 줘요. 기본값은 0이에요.

  • index.remote_store.translog.buffer_interval (Dynamic, time unit): 트랜스로그 데이터를 원격 저장소에 업로드하기 전에 버퍼링하는 간격이에요. 더 자주 업로드하면 내구성이 향상되지만 성능에 영향을 줄 수 있어요. 이 설정은 클러스터 수준의 cluster.remote_store.translog.buffer_interval 설정과 함께 작동하며, 인덱스 수준 설정이 우선 적용돼요. 기본값은 클러스터 설정을 따릅니다.

  • index.blocks.read_only (Dynamic, Boolean): true로 설정하면 인덱싱, 업데이트, 삭제를 포함한 모든 쓰기 작업을 차단하여 인덱스를 읽기 전용으로 만들어요. 검색 및 가져오기와 같은 읽기 작업은 정상적으로 계속 작동해요. 이 설정은 유지 관리 또는 문제 해결 중에 쓰기를 일시적으로 방지하는 데 유용해요. 기본값은 false예요.

  • index.routing.allocation.require.temp (Dynamic, string): 이 인덱스의 샤드가 지정된 온도 속성을 가진 노드에만 할당되도록 해요. 이 설정은 서로 다른 노드 유형이 서로 다른 데이터 온도를 처리하는 핫-웜 아키텍처에서 사용돼요. 값은 hot, warm 또는 cold와 같은 노드 속성과 일치해야 해요. 기본값은 없으며, 설정되지 않은 경우 샤드는 적격한 노드에 할당될 수 있어요.

  • index.periodic_flush_interval (Dynamic, time unit): 설정된 간격으로 주기적으로 플러시를 트리거하여 모든 인메모리 작업을 디스크의 세그먼트에 저장해요. OpenSearch는 트랜잭션 로그 크기와 같은 조건에 따라 백그라운드에서 자동으로 플러시 작업을 수행해요. 기본값은 -1이며, 주기적 플러시를 비활성화해요. 풀 기반 수집 인덱스의 경우 기본값은 10m이에요. 자세한 내용은 풀 기반 수집을 참조하세요. 워크로드에 예측 가능한 시간 기반 플러시 간격이 필요한 경우 이 설정을 구성할 수 있어요.

병합 설정

병합 설정은 Lucene 세그먼트가 병합되는 방식을 제어해요. 병합 정책을 선택하는 index.merge.policy 설정은 정적이에요. 다른 모든 병합 설정은 동적이에요. 병합 정책 선택에 대한 자세한 내용은 index.merge.policy를 참조하세요.

계층형 병합 정책 설정

tiered 병합 정책(기본값)을 사용하는 경우 다음 설정이 병합 동작을 제어해요.

  • index.merge.policy.max_merge_at_once (Dynamic, integer): 일반 병합 작업 중에 한 번에 병합할 최대 세그먼트 수를 설정해요. 값이 높을수록 전체 병합 횟수는 줄어들지만 각 병합 작업 중에 더 많은 메모리와 I/O 리소스가 필요해요. 기본값은 30이고 최소값은 2예요.

  • index.merge.policy.segments_per_tier (Dynamic, double): 계층형 병합 정책에서 계층당 허용되는 세그먼트 수를 제어해요. 값이 작을수록 병합이 더 많이 발생하지만 세그먼트 수가 줄어들어 인덱싱 오버헤드는 증가하지만 검색 성능이 향상될 수 있어요. 기본값은 10.0이고 최소값은 2.0이에요.

  • index.merge.policy.floor_segment (Dynamic, byte unit): 병합 정책이 구분하는 가장 작은 세그먼트 크기를 설정해요. 이 값보다 작은 세그먼트는 이 값으로 반올림되어 정책이 병합 후보를 선택할 때 동일한 크기로 처리돼요. 따라서 가장 작은 세그먼트는 작은 세그먼트의 긴 꼬리로 축적되지 않고 그룹화되어 일찍 병합돼요. 값이 클수록 작은 세그먼트를 더 적극적으로 병합하여 전체 세그먼트 수는 줄어들지만 병합 작업이 증가해요. 값은 0보다 커야 해요. 기본값은 16mb예요.

  • index.merge.policy.max_merged_segment (Dynamic, byte unit): 백그라운드 병합으로 생성되는 세그먼트의 최대 크기를 설정해요. 병합 정책은 예상 결과가 이 크기를 초과할 경우 세그먼트 그룹 병합을 중지해요. 따라서 이 값보다 큰 세그먼트는 강제 병합을 통해서만 생성돼요. 값이 작을수록 개별 병합 시간은 짧아지지만 인덱스에 더 많은 세그먼트가 남게 돼요. 기본값은 5gb예요.

  • index.merge.policy.deletes_pct_allowed (Dynamic, double): 병합 정책이 해당 공간을 회수하기 위해 세그먼트 병합을 시작하기 전에 인덱스에 축적될 수 있는 삭제된 문서의 비율을 설정해요. 값이 낮을수록 디스크 공간을 더 빨리 회수하지만 병합 작업이 증가해요. 기본값은 20.0이에요. 유효한 값은 5.0에서 50.0까지예요.

  • index.merge.policy.expunge_deletes_allowed (Dynamic, double): only_expunge_deletes가 true로 설정된 강제 병합이 세그먼트를 다시 작성하기 전에 세그먼트에 포함되어야 하는 삭제된 문서의 비율을 설정해요. 기본값은 10.0이에요. 유효한 값은 0.0에서 100.0까지예요. 자세한 내용은 강제 병합 API를 참조하세요.

  • index.merge.policy.reclaim_deletes_weight (Dynamic, double): 더 이상 사용되지 않으며 더 이상 적용되지 않아요. OpenSearch는 값을 받아서 저장하지만 병합 정책에 전달하지 않으므로 변경해도 효과가 없어요. 삭제된 문서가 회수되는 시점을 제어하려면 index.merge.policy.deletes_pct_allowed를 사용하세요. 기본값은 2.0이고 최소값은 0.0이에요.

로그 바이트 크기 병합 정책 설정

log_byte_size 병합 정책을 사용하는 경우 다음 설정이 병합 동작을 제어해요.

  • index.merge.log_byte_size_policy.merge_factor (Dynamic, integer): 일반 병합 작업 중에 한 번에 병합되는 세그먼트 수를 제어해요. 값이 높을수록 더 적고 더 큰 세그먼트가 생성되어 검색 성능이 향상될 수 있지만 병합 중에 더 많은 리소스를 사용해요. 기본값은 10이고 최소값은 2예요.

  • index.merge.log_byte_size_policy.min_merge (Dynamic, byte unit): 세그먼트 병합의 최소 크기 임계값을 설정해요. 이 크기보다 작은 세그먼트는 더 적극적으로 병합돼요. 값이 작을수록 작은 세그먼트는 줄어들지만 병합 작업이 더 많이 발생해요. 기본값은 16mb예요.

  • index.merge.log_byte_size_policy.max_merge_segment (Dynamic, byte unit): 일반 병합 작업 중에 생성되는 세그먼트의 최대 크기를 제어해요. 더 큰 세그먼트는 쿼리 성능을 향상시키지만 더 많은 메모리가 필요하고 병합 시간이 늘어날 수 있어요. 기본값은 5gb예요.

  • index.merge.log_byte_size_policy.max_merge_segment_forced_merge (Dynamic, byte unit): 강제 병합 작업(예: 인덱스 최적화 중)을 수행할 때 최대 세그먼트 크기를 설정해요. 이를 통해 강제 병합이 일반 병합보다 더 큰 세그먼트를 생성할 수 있어요. 기본값은 무제한이에요.

  • index.merge.log_byte_size_policy.max_merged_docs (Dynamic, integer): 단일 세그먼트가 포함할 수 있는 최대 문서 수를 설정해요. 병합 정책은 이 개수를 초과하는 세그먼트를 생성하는 병합을 건너뛰므로 바이트가 아닌 문서 수로 세그먼트 크기를 제한해요. 기본값은 2147483647이며, 이는 세그먼트당 문서 수에 실질적인 제한을 두지 않아요.

  • index.merge.log_byte_size_policy.no_cfs_ratio (Dynamic, double): 세그먼트가 Lucene의 복합 파일 형식으로 작성될 수 있는 전체 인덱스 크기에서 세그먼트가 차지할 수 있는 최대 비율을 설정해요. 복합 파일 형식은 세그먼트의 파일을 단일 파일로 압축하여 열린 파일 핸들 수를 줄여줘요. 이 비율보다 큰 세그먼트는 별도의 파일로 작성돼요. 모든 세그먼트에 복합 형식을 사용하려면 값을 1.0(또는 true)으로 설정하고, 비활성화하려면 0.0(또는 false)으로 설정하세요. 기본값은 0.1이에요. 유효한 값은 0.0에서 1.0까지예요.

병합 스케줄러 설정

다음 설정은 병합 작업이 실행되는 방식을 결정하는 병합 스케줄러를 제어해요.

  • index.merge.scheduler.max_thread_count (Dynamic, integer): 단일 샤드에서 한 번에 병합할 수 있는 최대 스레드 수를 설정해요. 이는 각 샤드 내 병합 작업의 동시성을 제어해요. 값이 높을수록 SSD와 여러 CPU 코어가 있는 시스템에서 병합 성능이 향상될 수 있지만 리소스 사용량이 증가할 수 있어요. 인덱스가 회전 플래터 드라이브에 있는 경우 이 값을 1로 낮추세요. 기본값은 Math.max(1, Math.min(4, node.processors / 2))이며, 솔리드 스테이트 드라이브에 적합해요. 최소값은 1이에요.

  • index.merge.scheduler.auto_throttle (Dynamic, Boolean): 병합 작업이 시스템을 압도하지 않도록 자동 조절을 활성화해요. 활성화하면 OpenSearch가 들어오는 인덱싱 로드에 따라 병합 I/O 속도를 자동으로 조정해요. 기본값은 true예요.

  • index.merge_on_flush.enabled (Dynamic, Boolean): 이 설정은 리프레시 시(또는 OpenSearch 용어로 플러시 시) 병합을 수행하여 세그먼트 수를 줄이는 Apache Lucene의 merge-on-refresh 기능을 제어해요. 기본값은 true예요.

  • index.merge_on_flush.max_full_flush_merge_wait_time (Dynamic, time unit): 이 설정은 index.merge_on_flush.enabled가 활성화되었을 때 병합을 기다리는 시간을 설정해요. 기본값은 10s예요.

  • index.merge_on_flush.policy (Dynamic, string): 이 설정은 index.merge_on_flush.enabled가 활성화되었을 때 사용할 병합 정책을 제어해요. 기본값은 default예요.

느린 로그 설정

OpenSearch는 검색 및 인덱싱 성능 모니터링을 위해 다음과 같은 동적 느린 로그 설정을 지원해요.

인덱싱 느린 로그 설정

  • index.indexing.slowlog.threshold.index.warn (Dynamic, time unit): WARN 수준에서 느린 인덱싱 작업을 로깅하기 위한 시간 임계값을 설정해요. 이 임계값보다 오래 걸리는 인덱싱 작업은 경고로 기록돼요. 기본값은 -1(비활성화)예요.

  • index.indexing.slowlog.threshold.index.info (Dynamic, time unit): INFO 수준에서 느린 인덱싱 작업을 로깅하기 위한 시간 임계값을 설정해요. 이 임계값보다 오래 걸리는 인덱싱 작업은 정보 제공 목적으로 기록돼요. 기본값은 -1(비활성화)예요.

  • index.indexing.slowlog.threshold.index.debug (Dynamic, time unit): DEBUG 수준에서 느린 인덱싱 작업을 로깅하기 위한 시간 임계값을 설정해요. 이것은 인덱싱 성능 분석을 위한 상세한 디버깅 정보를 제공해요. 기본값은 -1(비활성화)예요.

  • index.indexing.slowlog.threshold.index.trace (Dynamic, time unit): TRACE 수준에서 느린 인덱싱 작업을 로깅하기 위한 시간 임계값을 설정해요. 이것은 인덱싱 성능 문제를 해결하기 위한 가장 상세한 로깅을 제공해요. 기본값은 -1(비활성화)예요.

검색 느린 로그 설정

  • index.search.slowlog.threshold.query.warn (Dynamic, time unit): WARN 수준에서 느린 검색 쿼리 작업을 로깅하기 위한 시간 임계값을 설정해요. 이 임계값보다 오래 걸리는 쿼리 작업은 경고로 기록돼요. 기본값은 -1(비활성화)예요.

  • index.search.slowlog.threshold.query.info (Dynamic, time unit): INFO 수준에서 느린 검색 쿼리 작업을 로깅하기 위한 시간 임계값을 설정해요. 이 임계값보다 오래 걸리는 쿼리 작업은 정보 제공 목적으로 기록돼요. 기본값은 -1(비활성화)예요.

  • index.search.slowlog.threshold.query.debug (Dynamic, time unit): DEBUG 수준에서 느린 검색 쿼리 작업을 로깅하기 위한 시간 임계값을 설정해요. 이것은 쿼리 성능 분석을 위한 상세한 디버깅 정보를 제공해요. 기본값은 -1(비활성화)예요.

  • index.search.slowlog.threshold.query.trace (Dynamic, time unit): TRACE 수준에서 느린 검색 쿼리 작업을 로깅하기 위한 시간 임계값을 설정해요. 이것은 쿼리 성능 문제를 해결하기 위한 가장 상세한 로깅을 제공해요. 기본값은 -1(비활성화)예요.

  • index.search.slowlog.threshold.fetch.warn (Dynamic, time unit): WARN 수준에서 느린 검색 가져오기 작업을 로깅하기 위한 시간 임계값을 설정해요. 이 임계값보다 오래 걸리는 가져오기 작업은 경고로 기록돼요. 기본값은 -1(비활성화)예요.

  • index.search.slowlog.threshold.fetch.info (Dynamic, time unit): INFO 수준에서 느린 검색 가져오기 작업을 로깅하기 위한 시간 임계값을 설정해요. 이 임계값보다 오래 걸리는 가져오기 작업은 정보 제공 목적으로 기록돼요. 기본값은 -1(비활성화)예요.

  • index.search.slowlog.threshold.fetch.debug (Dynamic, time unit): DEBUG 수준에서 느린 검색 가져오기 작업을 로깅하기 위한 시간 임계값을 설정해요. 이것은 가져오기 성능 분석을 위한 상세한 디버깅 정보를 제공해요. 기본값은 -1(비활성화)예요.

  • index.search.slowlog.threshold.fetch.trace (Dynamic, time unit): TRACE 수준에서 느린 검색 가져오기 작업을 로깅하기 위한 시간 임계값을 설정해요. 이것은 가져오기 성능 문제를 해결하기 위한 가장 상세한 로깅을 제공해요. 기본값은 -1(비활성화)예요.

관련 문서예요

더 알아보기 (Learn more)