Dazzling 개발 노트

[Elasticsearch] script 사용 시 문서의 필드 값에 접근 본문

DevOps/Elastic

[Elasticsearch] script 사용 시 문서의 필드 값에 접근

dj._.dazzling 2024. 2. 28. 12:49

script 사용 시 문서의 필드 값에 접근하기 위해 여러 문법이 존재한다.

 

  1. ctx._source.local_authority:
    • ctx._source를 통한 접근은 문서의 원본 소스를 직접 참조합니다. 이 방식은 주로 문서 업데이트 시 사용됩니다.
    • ctx._source를 사용하면 해당 문서의 원본 JSON 소스에 저장된 데이터를 직접 읽고 수정할 수 있습니다. 이는 문서의 필드 값을 업데이트하거나 새 필드를 추가할 때 유용합니다.
    • 이 방식은 업데이트 연산에서 전체 문서를 로드하므로 비용이 더 많이 들 수 있고, 대규모 데이터 세트에 대한 업데이트를 수행할 때는 성능에 영향을 줄 수 있습니다.
  2. doc['local_authority'].value:
    • doc['field_name'].value 방식은 검색 쿼리 실행 시 사용되며, 엘라스틱서치가 인덱싱 과정에서 생성한 역 인덱스를 통해 필드 값을 읽습니다.
    • 이 방식은 주로 검색 쿼리에서 스크립트를 사용하여 데이터를 조회하거나, 스크립트 기반의 계산을 수행할 때 사용됩니다. 예를 들어, 스크립트 필드(script fields)나 스크립트를 사용한 집계(aggregations)에서 이 방식이 활용됩니다.
    • doc을 통한 접근은 검색 성능 최적화를 위해 설계되었으며, 원본 문서 소스가 아닌 인덱싱된 필드 값을 사용하기 때문에 업데이트 연산보다 더 빠르고 효율적입니다. 그러나 이 방식은 필드 값을 읽기만 할 수 있으며, 데이터를 수정할 수는 없습니다.

요약하자면, ctx._source는 문서 업데이트에 사용되며 문서의 원본 데이터를 변경할 때 사용합니다.

반면, doc['field_name'].value는 검색 쿼리에서 필드 값을 읽을 때 사용되며, 데이터를 변경하지 않고 조회하는 데 최적화되어 있습니다.

 
 

조회 시에는 ctx._source를 사용할 수 없습니다. ctx._source 객체는 엘라스틱서치의 업데이트와 같은 색인 시나리오에서 문서의 원본 데이터에 접근하기 위해 사용됩니다. 이는 주로 문서를 업데이트하거나 스크립트를 통해 문서의 필드를 수정할 때 활용됩니다.

반면, 조회 시나리오에서는 doc['field_name'].value 같은 구문을 사용하여 필드 값을 읽습니다. 이 방법은 검색 쿼리나 집계(aggregations) 내에서 사용되며, 엘라스틱서치에 의해 이미 인덱싱된 데이터를 효율적으로 조회하는 데 최적화되어 있습니다.

  • 검색 쿼리에서의 사용: 검색 쿼리 내에서 특정 조건에 따라 결과를 필터링하거나, 스크립트 기반의 계산을 수행할 때 doc['field_name'].value를 사용합니다. 예를 들어, 여러 필드의 값을 결합하거나, 특정 필드에 기반한 계산을 수행하여 검색 결과에 새로운 정보를 추가할 수 있습니다. 하지만 이는 조회 결과에만 적용되며 실제 문서의 데이터를 변경하지는 않습니다.
  • 스크립트 필드(script fields): 검색 요청에서 script_fields를 정의하여 검색 결과에 임시적인 계산 필드를 포함시킬 수 있습니다. 이를 통해 검색 시에만 볼 수 있는 동적인 데이터를 생성할 수 있으나, 이 데이터는 엘라스틱서치 인덱스에 저장되지 않고 검색 결과에만 일시적으로 나타납니다.

결론적으로, ctx._source는 문서 데이터를 수정할 때 사용되며, 조회 시에는 사용할 수 없습니다. 조회 시에는 doc 객체를 통해 필드 값에 접근하며, 이는 데이터를 읽기 위한 용도로 최적화되어 있습니다.

 

 

두 접근 방식은 모두 Painless 스크립트 내에서 사용되며, Elasticsearch에서 데이터를 처리하는 다양한 상황에 맞춰 선택적으로 사용됩니다. ctx._source는 데이터를 쓰거나 수정할 때, doc는 데이터를 읽을 때 사용