애플리케이션이 매우 많은 수의 결과를 처리하는 것은 비현실적인 경우가 많습니다. 이러한 이유로 API와 웹 서비스는 페이지 매김 컨트롤을 사용하여 애플리케이션이 작은 청크 또는 페이지 단위로 결과를 요청할 수 있도록 합니다.
Elasticsearch가 기본적으로 10개 이상의 결과를 반환하지 않는다는 것을 눈치채셨을 것입니다. 검색 요청에 size 매개변수(선택 사항)를 지정하여 이 최대값을 변경할 수 있습니다. 다음 예에서는 최대 5개의 검색 결과를 반환하도록 요청합니다:
결과의 추가 페이지에 액세스하려면 전체 결과 목록에서 시작할 위치를 나타내는 from_ 매개변수가 사용됩니다( from 은 파이썬에서 예약된 키워드이므로 from_ 사용).
다음 예는 5개의 결과 중 두 번째 페이지를 검색합니다:
app.py의 handle_search() 엔드포인트에 size 및 from_ 을 통합해 보겠습니다:
이제 페이지 크기는 5로 하드코딩되어 있습니다(원하는 다른 숫자를 자유롭게 사용하세요). from_ 인수는 제출된 양식에서 추가 필드로 제공되는 것으로 가정하지만, 이 필드는 선택 사항으로 간주되며 없는 경우 기본값은 0입니다.
index.html에서 사용할 수 있는 검색 양식에는 from_ 필드가 없으므로 일반 검색은 항상 첫 번째 결과부터 시작됩니다. 템플릿에는 표시된 결과의 범위와 총합에 대한 정보가 표시됩니다. 템플릿 표현식을 사용하여 이를 수행하는 방법은 다음과 같습니다:
템플릿에는 결과 목록에서 앞뒤로 이동할 수 있는 페이지 매김 버튼을 표시하는 로직도 포함되어 있습니다. 다음은 "이전 결과" 버튼의 구현입니다:
보시다시피 "이전 페이지" 버튼은 from_ 이 0보다 큰 경우에만 페이지에 렌더링됩니다. 이 버튼의 구현은 브라우저의 히스토리 API를 사용하여 한 페이지 뒤로 이동합니다.
"다음 페이지" 버튼은 훨씬 더 흥미로운 방식으로 구현되어 있습니다:
이 버튼은 실제로 독립형 버튼이 아니라 버튼 외에 두 개의 숨겨진 필드가 있는 완전한 양식입니다. 이 양식은 기본 검색 양식과 유사하지만, 다음 결과 페이지를 가리키도록 조정된 from_ 필드가 옵션으로 포함되어 있습니다. 이 버튼을 클릭하면 플라스크 애플리케이션은 동일한 텍스트 쿼리를 사용하지만 0이 아닌 from_ 값을 사용하는 이 대체 양식에서 검색 요청을 받습니다.
이 작고 영리한 페이지 매김 구현을 통해 여러 페이지의 결과를 탐색할 수 있습니다.