_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) 필드.

더 알아보기 (Learn more)