Doc values 매핑 파라미터
Doc values 매핑 파라미터
기본적으로 대부분의 필드는 역색인(inverted index)을 사용해 인덱싱되고 검색돼요. 하지만 정렬, 집계, 스크립트에서의 필드 접근은 다른 접근 방식이 필요하며, 이를 가능하게 하는 것이 doc values예요.
출처: 문서
본문
기본적으로 대부분의 필드는 역색인을 사용해 인덱싱되고 검색 가능합니다. 역색인은 고유한 정렬된 용어 목록을 저장하고 각 용어를 그것을 포함하는 문서에 매핑하는 방식으로 작동합니다.
하지만 정렬, 집계, 스크립트에서의 필드 접근은 다른 접근 방식이 필요합니다. 이러한 작업은 용어에서 문서를 찾는 대신 특정 문서에서 용어를 검색해야 합니다.
Doc values는 이러한 작업을 가능하게 합니다. 이는 인덱스 생성 시점에 만들어지는 디스크 기반의 컬럼 지향(column-oriented) 데이터 구조입니다. _source 필드와 동일한 값을 저장하지만, 그 형식은 빠른 정렬과 집계에 최적화되어 있습니다.
Doc values는 text 필드를 제외한 거의 모든 필드 유형에서 기본적으로 활성화되어 있습니다. 필드가 정렬, 집계, 스크립팅에 사용되지 않을 것임을 알고 있다면 doc values를 비활성화해 디스크 사용량을 줄일 수 있습니다.
예제
doc_values가 필드에 어떤 영향을 주는지 이해하려면 샘플 인덱스를 만드세요. 이 인덱스에서 status_code 필드는 기본적으로 doc_values가 활성화되어 정렬과 집계를 지원합니다. session_id 필드는 doc_values가 비활성화되어 정렬이나 집계는 지원하지 않지만 여전히 쿼리할 수 있습니다.
PUT /web_analytics
{
"mappings": {
"properties": {
"status_code": {
"type": "keyword"
},
"session_id": {
"type": "keyword",
"doc_values": false
}
}
}
}
인덱스에 샘플 데이터를 추가합니다.
PUT /web_analytics/_doc/1
{
"status_code": "200",
"session_id": "abc123"
}
PUT /web_analytics/_doc/2
{
"status_code": "404",
"session_id": "def456"
}
PUT /web_analytics/_doc/3
{
"status_code": "200",
"session_id": "ghi789"
}
status_code 필드에 집계를 수행합니다.
GET /web_analytics/_search
{
"size": 0,
"aggs": {
"status_codes": {
"terms": {
"field": "status_code"
}
}
}
}
status_code는 doc_values가 활성화되어 있으므로 이 집계는 올바른 결과를 반환합니다.
{
"took": 37,
"timed_out": false,
"terminated_early": true,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"status_codes": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "200",
"doc_count": 2
},
{
"key": "404",
"doc_count": 1
}
]
}
}
}
session_id 필드에 집계를 시도해 보세요.
GET /web_analytics/_search
{
"size": 0,
"aggs": {
"session_counts": {
"terms": {
"field": "session_id"
}
}
}
}
이 집계는 session_id의 doc_values가 비활성화되어 있어 집계에 필요한 문서-필드 조회(document-to-field lookup)가 불가능하므로 실패합니다.