[Elasticsearch] 페이지네이션
검색결과를 보여주는데 있어서 중요한 것 중 하나가 또 잘 잘라서 보여주는 것이다.
검색결과가 5000개라고 5000개를 한번에 던져줄 수는 없는 노릇 아닌가.
결과를 잘라서 보여주고 싶다면, 일단 size 값을 지정해줘야 한다.
2개로 잘랐으니 이제 2개씩만 보여줄 것이다.
스크롤
그런데 자르기만 하면 뭐하나? 다음 페이지를 볼 수 있어야 하지 않겠는가.
그럴 때 사용하기 좋은 것이 스크롤이라는 자체 기능이다.
쿼리파라미터 scroll로 스크롤의 유지시간을 전달해주면,
처음 검색했을 때의 컨텍스트를 유지한 채로 다음 페이지로 계속 넘길 수 있게 해주는 "스크롤"을 만들어주고, 그걸 접근할 수 있는 "_scroll_id"라는 값을 던져준다.
근데 이걸 계속 저장하면 자원낭비니까 시간을 적당히 잘 잡는게 좋다. 그래서 나는 위에서 3분으로만 저장해뒀다.
스크롤은 "POST /_search/scroll"을 통해 사용할 수 있다.
스크롤은 검색당시의 컨텍스트를 고스란히 갖고 있기 때문에, 따로 뭐 검색조건이나 사이즈같은걸 던져줄 필요가 없다.
그럼 이렇게 그 다음 페이지를 그대로 던져준다.
없을때까지

From
하지만 굳이 컨텍스트를 유지할 필요 없이 넘기기만 해도 된다면, From 만으로도 충분할 수 있다.
이거는 그냥 SQL에서의 OFFSET과 같은 놈이다.
몇번째 인덱스부터 가져올지를 지정한다.
가령 다음과 같이 size를 2, from을 2로 지정한다면, 2 인덱스부터 해서 2개만 가져오라는 뜻이 된다.
두번째 페이지다.

그리고 당연히 2를 또 더한 4를 넣으면 3번째 페이지가 된다.
이번엔 비어있다.
그냥 실제로 더 없기 때문이다.
둘중에 필요한대로 골라쓰면 된다.
참조
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html#scroll-search-results
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-request-from-size.html