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"
}
}
}
}