개요
- elasticsearch에서는 pagination을 위해 search 명령 시 from과 size로 한 번에 볼 수 있는 문서양을 조절할 수 있다.
- 문제는 from과 size 문서는 10,000개 이하 문서까지만 조회가 가능한다는 것이다.
- 10,001번째 문서는 from과 size로 조회하면 빈 값만 리턴하게 된다.
- 이때는 정렬할 필드를 지정 후 정렬하고, search_after 인자를 이용해서 그 다음 문서를 조회할 수 있다.
예시 데이터
- | id | 부서명 | | — | —— | | 1 | A0001 | | 2 | A0002 | | 3 | A0003 | …
search_after 인자를 이용한 조회 예시
1 2 3 4 5 6 7 8 9 10 11 12 13
GET /_search { "size": 10, "query": { "match_all": {} }, "sort": [ {"id": "desc"} ], "search_after": [ "id": 4 ] }
인자 설명
- size
- 한 번에 조회할 행의 수를 의미한다.
- query
- 조회 조건을 입력하는 부분이다.
- 예시에서는 모든 행을 조회한다.
- sort
- 정렬기준을 지정하는 컬럼이다.
- 여러 개의 정렬기준을 지정할 수 있다.
- 정렬기준에 수 만큼 search_after도 지정해야한다.
- 정렬은 기본적으로 numeric 인자를 허용한다.
만약 text type이면 keyword로 변경해서 지정해주면 처리된다.
ex) id => id.keyword
- search_after
- 조회할 기준이 되는 행의 정렬기준 필드 값을 입력한다.
- search_after 값이 포함된 행부터 size 수 만큼의 행을 search 명령 결과로 리턴하게된다.
- 예시는 id가 4인 행으로부터 이후 10개의 행을 결과로 리턴한다.
pit 인자
- 공식문서에는 pit을 생성하여 사용하도록 권고하고 있다.
- search_after 사용 시 정렬이 들어가기 때문에 비용이 비쌀 것으로 추정된다.
- pit은 이를 캐싱하는 역할을 하는 것으로 보인다.
- 그래서 검색 성능이 좀 더 향상시킬 수 있다.
- 그러나 multi index 검색 시에는 사용할 수 없어서 여기서는 pit 인자를 제외시켰다.