_source 메타데이터 필드
_source 메타데이터 필드
_source 필드는 인덱스된 원본 JSON 문서 본문을 포함해요. 이 필드는 검색 가능하지는 않지만 저장되므로, get이나 search 같은 가져오기(fetch) 요청을 실행할 때 전체 문서를 반환할 수 있어요.
출처: 문서
본문
필드 비활성화하기
다음 예제 요청처럼 enabled 파라미터를 false로 설정해 _source 필드를 비활성화할 수 있어요:
PUT sample-index1
{
"mappings": {
"_source": {
"enabled": false
}
}
}
_source 필드를 비활성화하면 update, update_by_query, reindex API 같은 특정 기능들의 가용성에 영향을 줄 수 있고, 원본 인덱스 문서를 사용해 쿼리나 집계를 디버깅하는 기능에도 영향을 줄 수 있어요. _source 필드를 명시적으로 저장하지 않고도 이러한 기능을 지원하려면, 저장 제약을 해치지 않는 선에서 Derived source를 사용할 수 있어요.
필드 포함 또는 제외하기
includes와 excludes 파라미터를 사용해 _source 필드의 내용을 선택적으로 제어할 수 있어요. 이를 통해 _source 관련 필드를 인덱스한 후, 저장하기 전에 정리(prune)할 수 있어요. 다음 예제 요청을 참고하세요:
PUT logs
{
"mappings": {
"_source": {
"includes": [
"*.count",
"meta.*"
],
"excludes": [
"meta.description",
"meta.other.*"
]
}
}
}
이 필드들은 _source에 저장되지 않지만, 데이터가 인덱스된 상태로 유지되므로 여전히 검색할 수 있어요.
Derived source
OpenSearch는 입력된 각 문서를 _source 필드에 저장하고 검색을 위해 개별 필드도 인덱스해요. _source 필드는 상당한 저장 공간을 소비할 수 있어요. 저장 공간 사용을 줄이기 위해, OpenSearch가 _source 필드 저장을 건너뛰고 필요할 때(예: search, get, mget, reindex, update 작업 중) 동적으로 재구성하도록 구성할 수 있어요.
derived source를 활성화하려면 derived_source 인덱스 수준 설정을 구성해요:
PUT sample-index1
{
"settings": {
"index": {
"derived_source": {
"enabled": true
}
}
}
}
_source 필드를 건너뛰면 저장 요구 사항을 크게 줄일 수 있지만, 소스를 동적으로 유도하는 것은 일반적으로 저장된 _source를 읽는 것보다 느려요. 검색 쿼리 중에 이러한 오버헤드를 피하려면 필요하지 않을 때 _source 필드를 요청하지 마세요. 검색 쿼리에서 _source 파라미터를 false로 설정하거나(다음 예제에서 확인) include/exclude 필드 목록을 제공하면 됩니다:
GET sample-index1/_search
{
"_source": false,
"query": { "match_all": {} }
}
Get Document API나 Multi-get Documents API를 사용한 실시간 읽기는 refresh가 일어나기 전까지 translog에서 제공되는데, derived source를 사용하면 성능이 더 느려질 수 있어요. 이는 소스가 재구성되기 전에 문서를 먼저 임시로 입력(ingest)해야 하기 때문이에요. translog 읽기 중에 derived source 생성을 비활성화하는 인덱스 수준 derived_source.translog 설정을 사용하면 이런 추가 지연을 피할 수 있어요:
PUT sample-index1
{
"settings": {
"index": {
"derived_source": {
"translog": {
"enabled": false
}
}
}
}
}
이 설정을 사용하면, 문서가 아직 translog에 있는지 아니면 segment에 기록되었는지에 따라 문서의 _source 내용에서 차이를 발견할 수 있어요.
지원되는 필드와 파라미터
Derived source는 쿼리 시점에 문서를 재구성하기 위해 doc_values와 stored_fields를 사용해요. doc_values의 구현 방식 때문에 동적으로 생성된 _source는 원본 입력 문서와 형식이나 정밀도가 다를 수 있어요.
Derived source는 다음 필드 타입을 지원하며, 대부분 필드 매핑을 변경할 필요가 없어요(일부 제한 있음):
- boolean
- byte, double, float, half_float, integer, long, short
- date
- date-nanos
- geo_point
- ip
- keyword
- unsigned_long
- scaled_float
- text
- wildcard
derived source가 활성화된 text 필드의 경우, 필드 값은 기본적으로 stored field로 저장돼요. store 매핑 파라미터를 true로 설정할 필요가 없어요. wildcard 필드를 derived source와 함께 사용하려면 doc_values 매핑 파라미터를 true로 설정해야 해요.
제한 사항
Derived source는 다음 필드를 지원하지 않아요:
copy_to파라미터를 포함하는 필드.ignore_above나normalizer파라미터를 정의하는 keyword 및 wildcard 필드.- 중첩(nested) 필드.