Muitas vezes, é impraticável para uma aplicação lidar com um número muito grande de resultados. Por esse motivo, APIs e serviços web utilizam controles de paginação para permitir que os aplicativos solicitem os resultados em pequenos blocos ou páginas.

Você deve ter notado que, por padrão, o Elasticsearch não retorna mais de 10 resultados. O parâmetro opcional size pode ser fornecido em uma solicitação de pesquisa para alterar esse valor máximo. O exemplo a seguir solicita que sejam retornados até 5 resultados de pesquisa:

Para acessar páginas adicionais de resultados, o parâmetro from_ é usado, que indica de onde na lista completa de resultados começar (já que from é uma palavra-chave reservada em Python, from_ é usado).

O próximo exemplo recupera uma segunda página com 5 resultados:

Vamos incorporar size e from_ no endpoint handle_search() em app.py:

Aqui, o tamanho da página está agora fixo em 5 (sinta-se à vontade para usar qualquer outro número que desejar). O argumento from_ é considerado como um campo adicional no formulário enviado, mas este campo é considerado opcional, assumindo o valor padrão 0 quando não estiver presente.

O formulário de pesquisa disponível em index.html não possui um campo from_ , portanto, as pesquisas regulares sempre começarão a partir do primeiro resultado. O modelo exibe informações sobre o intervalo de resultados mostrados e qual é o total. Eis como isso é feito usando expressões de modelo:

O modelo também inclui lógica para exibir botões de paginação para avançar ou retroceder na lista de resultados. Aqui está a implementação do botão "Resultados anteriores":

Como você pode ver, o botão "Página anterior" só é exibido na página quando from_ é maior que zero. A implementação deste botão utiliza a API de histórico do navegador para voltar uma página.

O botão "Próxima página" tem uma implementação muito mais interessante:

Na verdade, este botão não é um botão independente, mas sim um formulário completo que possui dois campos ocultos além do botão. O formulário é semelhante ao formulário de pesquisa principal, mas inclui o campo opcional from_ , ajustado para apontar para a próxima página de resultados. Ao clicar neste botão, o aplicativo Flask receberá uma solicitação de pesquisa deste formulário alternativo, que usa a mesma consulta de texto, mas um valor diferente de zero from_ .

Com essa implementação de paginação simples e inteligente, você poderá navegar por várias páginas de resultados.

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)