Elasticsearch 인덱스의 필드를 표시하는 방법

맵핑 및 _검색 API, 하위 필드, 합성 _소스 및 런타임 필드를 사용하여 Elasticsearch 인덱스의 필드를 표시하는 방법을 알아보세요.

Elasticsearch를 사용하면 데이터를 빠르고 유연하게 색인화할 수 있습니다. 클라우드에서 무료로 사용해 보거나 로컬에서 실행하여 색인 작업이 얼마나 쉬운지 확인해 보세요.

이 문서에서는 Elasticsearch 인덱스의 필드를 표시하는 방법에 대해 설명합니다. 이는 데이터 구조를 이해하고, 특정 필드를 식별하고, 문제를 해결하는 데 유용할 수 있습니다. 다음 주제를 다룰 예정입니다:

  1. _mapping API를 사용하여 필드 정보 검색하기
  2. _search API를 사용하여 필드 값 표시
  3. 하위 필드 표시
  4. Synthetic _source
  5. 런타임 필드

1. 맵핑 API를 사용하여 필드 정보 검색하기

_mapping API를 사용하면 인덱스 또는 여러 인덱스에 대한 매핑 정의를 검색할 수 있습니다. 여기에는 필드, 데이터 유형 및 기타 속성에 대한 정보가 포함됩니다. 특정 인덱스에 대한 매핑을 검색하려면 다음 요청을 사용하세요:

예를 들어 my_index 이라는 인덱스가 있는 경우 다음 요청으로 해당 인덱스의 매핑을 검색할 수 있습니다:

응답에는 필드 및 해당 속성에 대한 정보가 포함된 인덱스에 대한 매핑 정의가 포함됩니다.

특정 필드에 대한 매핑을 검색할 수도 있습니다. 매핑이 상당히 크고 특정 필드에만 집중하려는 경우 유용할 수 있습니다. 특정 필드의 매핑을 검색하려면 다음 요청을 사용하세요:

다음 요청에서와 같이 쉼표로 이름을 구분하여 여러 필드의 매핑을 검색할 수도 있습니다:

2. search API를 사용하여 필드 값 표시하기

Elasticsearch 인덱스의 필드 값을 표시하려면 _search API를 사용하면 됩니다. _search API는 반환되는 필드를 제어할 수 있는 다양한 방법을 제공하며, 두 가지 주요 방법은 다음과 같습니다:

  1. _source: _source 필드에는 수집 파이프라인이나 전처리 단계에 의해 변경된 사항을 포함하여 색인된 그대로의 원본 JSON 문서 본문이 포함되어 있습니다. 소스 문서의 특정 필드를 표시하려면 아래에서 설명하는 대로 소스 필터링을 구현합니다.
  2. fields: fields 매개변수를 사용하면 색인 매핑을 기반으로 검색을 수행할 때 문서에서 특정 필드를 검색할 수 있습니다. _source 과 달리 fields_source 을 참조하지 않고 저장된 필드, 문서 값 또는 런타임 필드의 값을 반환할 수도 있지만 문서 값이나 저장된 설정이 없는 표준 필드의 경우 _source 으로 되돌아갑니다. 이는 아래에서 살펴보겠지만 성능 등 많은 이점을 가져올 수 있습니다.

소스

기본적으로 _search API는 색인된 원본 JSON 문서가 포함된 _source 필드를 반환합니다. 특정 필드를 표시하려면 검색 요청의 _source 매개변수에 필터를 추가할 수 있으며, 이를 소스 필터링이라고 합니다.

다음은 my_index 인덱스에 있는 문서에 대한 title author 필드 값을 반환하는 검색 요청의 예입니다:

이 예제에서 _source 매개변수는 반환할 필드를 지정합니다.

더 많은 제어가 필요한 경우 _source 객체의 includesexcludes 속성을 사용할 수 있습니다. 예를 들어 아래 쿼리는 최상위 수준 title 필드와 authorauthor.description 을 제외한 모든 하위 필드를 반환합니다.

이 예제에서는 author.* 패턴을 사용하여 author 객체의 모든 직접 하위 필드를 검색합니다. 그런 다음 author.description 을 명시적으로 제외하여 다른 작성자 필드만 반환되도록 합니다. 이 경우에도 여전히 소스 JSON을 로드하고 구문 분석해야 하므로 성능이 향상되지는 않지만 네트워크를 통해 전송되는 응답의 크기를 줄일 수 있다는 점에 유의하세요.

필드 매개변수 사용

fields 매개변수를 사용하여 검색 응답에 반환되는 필드를 필터링할 수 있습니다. _source 대신 fields 을 사용하면 다음과 같은 여러 가지 이점이 있습니다:

  • 성능 개선: fields 은 전체 _source 을 로드할 필요 없이 저장된 필드 또는 문서 값에서 직접 값을 반환할 수 있으므로 응답 페이로드 크기가 더 작아집니다.
  • 형식화된 출력: 표준 필드의 경우 fields_source 으로 되돌아가 값을 가져올 수 있지만, 인덱스 매핑을 확인하여 형식이 지정된 날짜와 같은 출력의 형식을 적절히 지정하여 집계 및 정렬에 사용되는 것과 일관성을 유지합니다.
  • 런타임 필드에 대한 액세스: fields 은 원본 _source 에 없는 런타임 필드를 반환할 수 있습니다.
  • 더 많은 혜택은 여기에서 확인할 수 있습니다.

예를 들어 my_index 인덱스에서 titleauthor 필드만 반환하려면 다음 검색 요청을 사용할 수 있습니다:

위의 쿼리에서는 소스 문서를 반환하지 않도록 _source 필드를 false로 설정했습니다. 이렇게 하면 응답의 페이로드 크기를 크게 최소화할 수 있지만 titleauthor 필드가 keyword 필드 유형이고 기본적으로 doc_values 이 활성화되어 있기 때문에 작동한다는 점을 기억하세요. 필드에 doc_values 가 활성화되어 있지 않고 _source 가 false로 설정되어 있으면, Elasticsearch는 이를 검색할 방법이 없으며 응답에서 건너뛰게 됩니다.

fields 응답은 값이 하나만 있는 경우에도 항상 각 필드에 대한 값 배열을 반환한다는 점에 유의하세요. 이는 Elasticsearch에 전용 배열 유형이 없고 모든 필드에 여러 개의 값이 있을 수 있기 때문입니다. Elasticsearch의 배열에 대한 자세한 내용을 보려면 여기를 클릭하세요.

필드를 검색하는 다른 방법

_source 또는 fields 을 사용하여 필드를 검색하는 것이 권장되는 방법이지만, 특정 사용 사례에 따라 다음과 같은 다양한 방법을 사용할 수 있습니다:

문서 값 필드: _source docvalue_fields 매개 변수를 사용하여 검색할 수 있습니다. 문서 값은 _source 과 동일한 필드 값을 저장하지만 정렬 및 집계에 최적화된 온디스크 데이터 구조로 저장합니다.

_source 에 저장된 값과는 별개이므로 전체 _source 를 로드하지 않고도 특정 필드를 요청할 수 있습니다. 이 기능은 대규모 문서를 쿼리하지만 문서 값을 지원하는 작은 필드 몇 개만 필요한 경우에 유용합니다. docvalue_fields 사용의 또 다른 사용 사례는 아래 예제에서 볼 수 있듯이 datenumeric 필드에 사용자 지정 서식을 사용하려는 경우입니다.

doc_values 을 활성화한 필드 또는 keyword, date, 숫자 유형 및 boolean 과 같이 기본적으로 활성화된 필드 유형에 대해서만 작동하며, text 또는 annotated_text 에는 작동하지 않습니다.

이 예에서는 docvalue_fields 매개변수를 사용하여 전체 _source 문서를 로드하지 않고 title, author, published 필드를 검색합니다:

이 쿼리가 실행되면 Elasticsearch는 각 문서에 대해 _source 을 참조하는 대신 온디스크 컬럼형 저장소에서 직접 값을 가져옵니다. published 필드는 쿼리에 제공된 format 매개변수 덕분에 기본 형식이 아닌 epoch_millis 형식으로 반환됩니다.

저장된 필드: 매핑에서 특정 필드를 저장된 것으로 명시적으로 표시한 경우 stored_fields 매개변수를 사용하여 해당 필드를 필터링할 수 있습니다. 특정 필드에 대해서만 가벼운 응답을 원하거나 나중에 검색할 수 있도록 의도적으로 저장한 필드에 대해 이 기능을 사용하면 유용합니다. _source 과 별도로 저장되므로 이 방법은 _source 을 로드할 필요가 없는 경우에도 유용합니다.

이 옵션은 기본적으로 꺼져 있으며 일반적으로 권장되지 않는다는 점에 유의하세요. 원본 소스 문서의 특정 하위 집합을 반환하려면 대신 소스 필터링을 사용하세요.

아래 예제 쿼리에서는 stored_fields 매개 변수를 사용하여 "store”: true" 인덱스 매핑 구성이 있는 summary 필드를 검색합니다.

이 쿼리가 실행되면 Elasticsearch는 이 필드가 ”store”: true 로 표시되어 있는지 확인하며, 이 필드를 찾지 못하면 필드를 완전히 건너뜁니다.

3. 하위 필드 표시

인덱스에 하위 필드가 포함된 경우 점 표기법을 사용하여 fields 매개변수에서 필드 경로를 지정할 수 있습니다. 하위 필드는 중첩된 필드 유형과 다르다는 점에 유의하세요. 예를 들어 address.city 이라는 이름의 하위 필드가 있는 경우 다음과 같이 검색 응답에 포함할 수 있습니다:

이 예제에서는 검색 응답에 title, author, address.city 필드의 값이 포함됩니다.

4. 합성 _소스

_source 사용 기능을 유지하면서 디스크 공간도 절약하려면 인덱스 매핑에 합성 _source 을 사용하는 옵션이 있습니다. 합성 _source_source 이 비활성화되어 있는 경우에도 Elasticsearch가 저장된 필드 및 문서 값과 같은 기존 데이터로부터 _source 을 재구성할 수 있도록 하는 기능입니다. 이렇게 하면 재구성이 즉시 이루어지므로 쿼리 시 속도가 약간 느려지는 대신 저장 공간을 많이 절약할 수 있습니다. 인덱스 설정에서 아래 값을 사용하여 이 기능을 사용하도록 설정합니다:

_search API를 사용할 때 전체 문서 표시, 소스 필터링, _source 를 사용할 수 있을 것으로 기대하는 Kibana와 같은 다른 기능 및 도구와의 호환성, 전체 _source 문서를 저장할 필요가 없는 것 등이 합성 _source 사용의 몇 가지 이점입니다.

5. 런타임 필드

런타임 필드를 사용하면 쿼리 시 또는 런타임 블록 아래의 인덱스 매핑에서 스크립트 필드를 정의할 수 있습니다. 이러한 필드는 색인화되지 않으므로 런타임 필드를 추가해도 색인 크기가 증가하지는 않지만 _source 에 표시되지 않습니다. 매핑에 정의된 런타임 필드는 영구적이며 모든 쿼리에서 사용할 수 있는 반면, 쿼리 시점에 정의된 런타임 필드는 임시적이며 해당 검색 요청에서만 사용할 수 있습니다.

런타임 필드 사용의 주요 이점은 이미 수집한 후 문서에 필드를 추가할 수 있어 매핑 결정을 간소화할 수 있다는 점입니다. 런타임 필드는 문자열 서식 지정이나 점수 계산과 같이 원본 문서에는 없지만 스크립트를 사용하여 생성된 값으로 문서를 보강하는 데도 유용합니다.

또한 런타임 필드는 결과 집합의 모든 문서에 대해 스크립트를 실행해야 하므로 성능이 저하될 수 있다는 점도 유의할 필요가 있습니다. 런타임 필드를 검색하려면 _search API에서 fields 매개 변수를 사용할 수도 있습니다.

결론

Elasticsearch 인덱스의 필드를 표시하는 방법은 인덱스 매핑 또는 _source 을 사용하여 단순히 값을 검색하는 것부터 fields, docvalue_fields 또는 제어 및 효율성을 높이기 위한 런타임 필드를 사용하는 고급 방법까지 다양합니다. 검색 환경을 최적화하려면 다양한 방법 간의 장단점을 이해하는 것이 중요합니다. 페이로드를 최적화하든, 문서를 보강하든, 저장 공간을 절약하기 위해 합성 _source 을 사용하든, Elasticsearch는 필요한 데이터를 필요한 방식으로 찾을 수 있는 여러 가지 도구와 기능을 제공합니다. 이러한 기법은 데이터 구조를 이해하고, 특정 필드를 식별하고, 문제를 해결하는 데 도움이 될 수 있습니다.

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요