본문으로 건너뛰기
Elasticsearch Pagination Technique

Elasticsearch Pagination Technique

· loading · loading ·
gunyoung.Park
작성자
gunyoung.Park
Always curious, always exploring new tech
ElasticSearch - 이 글은 시리즈의 일부입니다.
부분 7: 이 글

ElasticSearch Pagination 3가지 옵션
#

1. From/Size Pagination
#

from + size = offset 방식으로 그때그때 메모리에 적재하여 검색을 함. 최대 10,000건까지 지원

index.max_result_window 옵션을 사용하여 10,000건 이상을 로드할 수 있지만 추천하지 않음

특징

  • 간단한 구현
  • 최대 10,000건 제한
  • Deep pagination 시 성능 저하

2. Search After
#

Pagination이 최대 10,000건까지 페이징 처리할 수 있는 한계를 극복할 수 있음. 일반적인 커서 방식과 유사함.

검색 결과의 sort 조건 필드를 키 값으로 사용하며 그 다음부터 조회를 함.

단점

search-after만 사용할 경우 중간에 인덱싱이 업데이트되거나 하면 응답 결과가 불규칙해질 수 있음.

PIT(Point In Time)와 함께 사용

이를 보완하기 위해 PIT(Point In Time)를 사용함

POST /my-index-000001/_pit?keep_alive=1m

위 요청을 통해 해당 인덱스의 현재 시점의 스냅샷을 찍어두고 다음과 같이 id 값으로 사용함

{
  "query": {},
  "size": 100,
  "sort": {
    "my_sort": "desc"
  },
  "search_after": {},
  "pit": {
    "id": "{{pit_value}}"
  }
}

중간에 인덱스에 변경사항이 있어도 스냅샷을 기준으로 응답 결과가 반환됨.

keep_alive는 해당 PIT의 유효기간과 같음. 최신 시점을 기준으로 PIT를 관리하는 것이 권장됨.

특징

  • 10,000건 이상 페이징 가능
  • 커서 기반 방식
  • PIT와 함께 사용 시 일관된 결과 보장
  • Deep pagination에 효율적

3. Scroll
#

Note: ES 공식 문서에 따라 Scroll 방식 대신 Search After 방식을 권장함

특징

  • 대량 데이터 추출용
  • 실시간 검색에는 부적합
  • 현재는 Search After + PIT 조합을 권장

참고 자료
#

ElasticSearch - 이 글은 시리즈의 일부입니다.
부분 7: 이 글

관련 글