다중 문서 조회 API

다중 문서 조회 API (Multi-get Documents API)

1.0에서 도입되었어요. Multi-get Documents API는 하나의 요청으로 하나 이상의 인덱스에서 여러 문서를 조회해요. 이 작업은 개별 GET 요청을 여러 번 실행하는 것보다 효율적이에요. 네트워크 오버헤드를 줄이고 클러스터에 대한 왕복(round-trip)을 한 번으로 합치기 때문이에요.

이 API는 ID로 특정 문서를 조회해야 하고 어떤 문서를 가져올지 알 때 사용해요. 흔한 시나리오로는 다음이 있어요.

  • 알려진 ID 목록을 기반으로 사용자 프로필, 제품 상세 정보, 또는 다른 엔티티 배치를 조회할 때
  • 주문 레코드와 관련 고객 정보를 함께 가져오는 것처럼, 서로 다른 인덱스의 관련 문서를 단일 작업으로 가져올 때
  • 각 문서에 대해 어떤 필드를 반환할지 제어하면서 여러 문서를 조회하는 효율적인 데이터 접근 패턴을 구현할 때

출처: 문서

본문

부분 응답 (Partial responses)

Multi-get Documents API는 빠른 응답을 우선시해요. 작업 중 하나 이상의 샤드가 실패하면 부분 결과를 반환해요. 샤드 실패로 특정 문서를 가져올 수 없거나 문서가 존재하지 않으면, 성공적으로 조회된 문서를 반환하면서 해당 문서에 대한 오류 세부 정보를 응답에 포함해요. 이렇게 하면 일시적인 실패나 없는 문서가 전체 작업을 막지 않아요.

엔드포인트 (Endpoints)

GET  /_mget
POST /_mget
GET  /{index}/_mget
POST /{index}/_mget

경로 파라미터 (Path parameters)

다음 표는 사용 가능한 경로 파라미터를 보여줘요. 모든 경로 파라미터는 선택 사항이에요.

파라미터 데이터 타입 설명
index String ids가 지정될 때 문서를 조회할 인덱스 이름이에요. docs 배열의 문서가 인덱스를 지정하지 않을 때도 사용해요.

쿼리 파라미터 (Query parameters)

다음 표는 사용 가능한 쿼리 파라미터를 보여줘요. 모든 쿼리 파라미터는 선택 사항이에요.

파라미터 데이터 타입 설명 기본값
_source Boolean 또는 List 또는 String _source 필드를 반환할지 말지 true 또는 false로 설정하거나, 반환할 필드 목록으로 설정해요. N/A
_source_excludes List 또는 String 응답에서 제외할 소스 필드의 쉼표 구분 목록이에요. _source_includes 쿼리 파라미터에 지정된 부분 집합에서 필드를 제외하는 데도 사용할 수 있어요. N/A
_source_includes List 또는 String 응답에 포함할 소스 필드의 쉼표 구분 목록이에요. 이 파라미터를 지정하면 이 소스 필드만 반환돼요. _source_excludes 쿼리 파라미터로 이 부분 집합에서 필드를 제외할 수 있어요. _source 파라미터가 false이면 이 파라미터는 무시돼요. N/A
preference String 작업을 수행할 노드나 샤드를 지정해요. 기본적으로 무작위예요. random
realtime Boolean true이면 요청이 near real time이 아닌 real time이에요. N/A
refresh Boolean 또는 String true이면 문서를 조회하기 전에 관련 샤드를 새로고침해요. 유효한 값은 다음과 같아요.
- false : 영향받는 샤드를 새로고침하지 않아요.
- true : 영향받는 샤드를 즉시 새로고침해요.
- wait_for : 응답하기 전에 변경 사항이 보일 때까지 기다려요.
N/A
routing List 또는 String 작업을 특정 샤드로 라우팅하는 데 사용하는 사용자 지정 값이에요. N/A
stored_fields List 또는 String true이면 문서의 _source 대신 인덱스에 저장된 문서 필드를 가져와요. N/A

요청 본문 필드 (Request body fields)

요청 본문은 조회할 문서를 지정해요. 요청 경로에 인덱스를 지정하지 않았다면 요청 본문의 각 문서에 인덱스 이름을 포함해야 해요. 다음 표는 사용 가능한 요청 본문 필드를 보여줘요.

필드 데이터 타입 설명
docs Array of objects 조회할 문서예요. ids 필드가 지정되지 않으면 필수예요. 각 객체는 _index, _id, routing, _source, stored_fields 필드를 포함할 수 있어요.
docs._index String 문서를 담고 있는 인덱스의 이름이에요. 요청 경로에 인덱스가 지정되지 않았다면 필수예요.
docs._id String 문서 ID예요. 필수예요.
docs.routing String 작업을 특정 샤드로 라우팅하는 데 사용하는 라우팅 값이에요. 문서를 인덱싱할 때 사용자 지정 라우팅 값을 사용했다면 필수예요.
docs._source Boolean, Array, 또는 Object 반환할 소스 필드를 제어해요. false이면 _source 필드가 응답에서 제외돼요. 배열이면 포함할 필드를 지정해요. 객체이면 필드 포함과 제외를 제어하는 includes와 excludes 배열을 포함할 수 있어요. 기본값은 true예요.
docs._source.includes Array of strings 응답에 포함할 소스 필드예요. 예를 들어 ["title", "author"]는 title과 author 필드만 반환해요.
docs._source.excludes Array of strings 응답에서 제외할 소스 필드예요. 예를 들어 ["internal_notes"]는 internal_notes 필드를 제외해요.
docs.stored_fields Array of strings _source 필드 대신 조회할 저장된 필드예요. 인덱스 매핑에 명시적으로 저장된 필드만 조회할 수 있어요. 지정하면 명시적으로 요청하지 않는 한 _source 필드는 반환되지 않아요.
ids Array of strings 모든 문서가 같은 인덱스에 있을 때 문서 ID를 지정하는 간단한 방법이에요. 요청 경로에 인덱스가 지정된 경우에만 사용할 수 있어요. 제공되면 docs 필드는 필요하지 않아요.

예제: 여러 인덱스에서 문서 조회 (Example: Retrieving documents from multiple indexes)

다음 예제는 books 인덱스에서 문서 하나와 articles 인덱스에서 문서 하나를 조회해요.

예제: IDs 배열 사용 (Example: Using the IDs array)

같은 인덱스에서 여러 문서를 조회할 때 경로에 인덱스를 지정하고 ids 배열을 사용하면 요청을 간단히 할 수 있어요. 다음 예제는 books 인덱스에서 세 개의 문서를 조회해요.

예제: 소스 필드 필터링 (Example: Filtering source fields)

_source 파라미터로 각 문서에 대해 반환할 필드를 제어할 수 있어요. 다음 예제는 서로 다른 소스 필터링 옵션을 보여줘요. 첫 번째 문서의 소스를 완전히 제외하고, 두 번째 문서는 특정 필드를 반환하며, 세 번째 문서는 includes를 사용해 선택된 필드만 반환해요.

예제: 저장된 필드 조회 (Example: Retrieving stored fields)

인덱스 매핑에 저장된 필드(stored field)가 있다면 문서 소스 대신 저장된 필드를 가져올 수 있어요. 다음 예제는 두 사용자 문서의 서로 다른 저장된 필드를 조회해요.

예제: 라우팅 값 지정 (Example: Specifying routing values)

문서를 인덱싱할 때 사용자 지정 라우팅을 사용했다면, 그 문서를 조회할 때 라우팅 값을 제공해야 해요. 다음 예제는 라우팅 값을 사용해 두 주문 문서를 조회해요. 첫 번째 문서는 쿼리 파라미터의 라우팅 값을 사용하고, 두 번째 문서는 자신의 라우팅 값을 지정해요.

예제 응답 (Example response)

Multi-get Documents API는 요청된 순서대로 조회된 문서를 담은 docs 배열을 반환해요. 각 문서는 메타데이터와 소스 데이터를 포함하거나, 문서를 조회할 수 없다면 오류를 포함해요.

응답 본문 필드 (Response body fields)

응답에는 요청된 각 문서에 대한 요소가 하나씩 들어 있는 docs 배열이 있고, 요청과 같은 순서로 반환돼요. 다음 표는 응답 본문 필드를 보여줘요.

필드 데이터 타입 설명
docs Array of objects 조회된 문서예요. 각 객체는 하나의 문서를 나타내며 이 표에서 설명하는 필드를 포함해요.
_index String 문서를 담고 있는 인덱스의 이름이에요.
_id String 문서 ID예요.
_version Integer 문서 버전 번호예요. 문서가 업데이트될 때마다 이 번호가 증가해요.
_seq_no Integer 문서가 인덱싱될 때 할당된 시퀀스 번호예요. 낙관적 동시성 제어에 사용돼요.
_primary_term Integer 문서가 인덱싱될 때 할당된 프라이머리 텀(primary term)이에요. 낙관적 동시성 제어를 위해 _seq_no와 함께 사용돼요.
found Boolean 문서가 발견되었는지 여부예요. false이면 문서가 존재하지 않고 _source 필드가 포함되지 않아요.
_source Object 문서의 원본 JSON 콘텐츠예요. found가 false이거나, 요청에서 _source가 false로 설정되었거나, stored_fields가 지정되었다면 생략돼요.
fields Object 문서의 저장된 필드예요. 요청에 stored_fields가 지정되고 found가 true일 때만 포함돼요. 각 필드 값은 배열로 반환돼요.
_routing String 문서를 특정 샤드로 보내는 데 사용한 라우팅 값이에요. 사용자 지정 라우팅 값을 사용한 경우에만 포함돼요.
error Object 실패로 인해 문서를 조회할 수 없을 때의 오류 정보예요. 오류 유형과 이유에 대한 세부 정보를 포함해요.

필요한 권한 (Required permissions)

Security plugin을 사용한다면 indices:data/read/mget 및 indices:data/read/mget* 권한이 있는지 확인하세요.

더 알아보기 (Learn more)