Eager global ordinals 매핑 파라미터

Eager global ordinals 매핑 파라미터

eager_global_ordinals 매핑 파라미터는 필드에 대한 전역 서수(global ordinals)가 언제 구축되는지를 제어해요. 활성화하면 전역 서수가 쿼리 실행 중에 "지연(lazily)" 구축되는 대신 인덱스 리프레시 중에 계산돼요.

출처: 문서

본문

eager_global_ordinals 매핑 파라미터는 필드에 대한 전역 서수(global ordinals)가 언제 구축되는지를 제어합니다. 활성화하면 전역 서수가 쿼리 실행 중에 "지연(lazily)" 구축되는 대신 인덱스 리프레시 중에 계산됩니다. 이는 전역 서수에 의존하는 연산(예: keyword 필드의 정렬과 집계)의 성능을 향상시킬 수 있습니다. 그러나 인덱스 리프레시 시간과 메모리 사용량을 증가시킬 수도 있습니다.

전역 서수는 용어 값을 정수 식별자로 매핑하는 것을 나타내며, 집계 및 정렬 연산을 빠르게 실행하기 위해 내부적으로 사용됩니다. "미리(eagerly)" 로드하면 인덱싱 중 추가적인 선행 처리를 대가로 쿼리 지연 시간이 줄어듭니다.

기본적으로 eager_global_ordinals는 비활성화되어 클러스터가 인덱싱 속도에 최적화되도록 합니다.

전역 서수는 필드 데이터 캐시(field data cache)에 저장되며 힙 메모리를 소비합니다. 고유 값이 많은(high cardinality) 필드는 많은 양의 힙 메모리를 소비할 수 있습니다. 메모리 관련 문제를 방지하려면 필드 데이터 서킷 브레이커(circuit breaker) 설정을 신중하게 구성하는 것이 중요합니다.

전역 서수가 사용되는 경우

검색에 다음 항목 중 하나가 포함되면 전역 서수가 사용됩니다.

  • keyword, ip, flattened 필드에 대한 버킷 집계. 여기에는 terms, composite, diversified_sampler, significant_terms 집계가 포함됩니다.
  • fielddata를 활성화해야 하는 text 필드에 대한 집계.
  • join 필드를 사용하는 부모/자식(parent/child) 쿼리. 예를 들어 has_child 쿼리 또는 parent 집계.

필드에서 eager global ordinals 활성화

다음 요청은 eager_global_ordinals를 활성화한 products라는 이름의 인덱스를 만듭니다.

PUT /products
{
  "mappings": {
    "properties": {
      "size": {
        "type": "keyword",
        "eager_global_ordinals": true
      }
    }
  }
}

다음 요청은 문서를 인덱싱합니다.

PUT /products/_doc/1
{
  "size": "ABC123"
}

다음 요청은 terms 집계를 실행합니다.

POST /products/_search
{
  "size": 0,
  "aggs": {
    "size_agg": {
      "terms": {
        "field": "size"
      }
    }
  }
}

더 알아보기 (Learn more)