A menudo es poco práctico que una aplicación gestione un número muy grande de resultados. Por esta razón, las APIs y los servicios sitio web emplean controles de paginación para permitir que las aplicaciones aplicar los resultados en pequeños fragmentos o páginas.

Puede que notaste que Elasticsearch por defecto no devuelve más de 10 resultados. El parámetro opcional de size puede dar en una solicitud de búsqueda para cambiar este máximo. El siguiente ejemplo pide que se devuelvan hasta 5 resultados de búsqueda:

Para acceder a páginas adicionales de resultados, se emplea el parámetro from_ , que indica desde dónde empezar en la lista completa de resultados (dado que from es una palabra clave reservada en Python, from_ se usa).

El siguiente ejemplo recupera una segunda página con 5 resultados:

Incorporemos size y from_ en el handle_search() final de app.py:

Aquí el tamaño de la página ahora está codificado en 5 (siéntete libre de usar cualquier otro número que prefieras). Se asume que el argumento from_ se da como un campo adicional en el formulario enviado, pero este campo se considera opcional, por defecto en 0 cuando no está presente.

El formulario de búsqueda disponible en index.html no tiene un campo from_ , por lo que las búsquedas regulares siempre comenzarán desde el primer resultado. La plantilla muestra información sobre el rango de resultados que se muestran y cuál es el total. Así es como se hace esto usando expresiones plantilla:

La plantilla también incluye lógica para mostrar botones de paginación que se mueven hacia adelante o hacia atrás en la lista de resultados. Aquí está la implementación del botón "Resultados anteriores":

Como puedes ver, el botón "Página anterior" solo se muestra en la página cuando from_ es mayor que cero. La implementación de este botón emplea la API de historial del navegador para retroceder una página.

El botón "Página siguiente" tiene una implementación mucho más interesante:

Este botón en realidad no es un botón independiente, sino una forma completa que tiene dos campos ocultos además del botón. El formulario es similar al formulario principal de búsqueda, pero incluye el campo opcional from_ , ajustado para apuntar a la siguiente página de resultados. Al pulsar este botón, la aplicación Flask recibirá una solicitud de búsqueda de este formulario alternativo, que emplea la misma consulta de texto pero con un valor de from_ distinto de cero.

Con esta pequeña e ingeniosa implementación de paginación podrás navegar por varias páginas de resultados.

¿Estás listo para crear experiencias de búsqueda de última generación?

No se logra una búsqueda suficientemente avanzada con los esfuerzos de uno. Elasticsearch está impulsado por científicos de datos, operaciones de ML, ingenieros y muchos más que son tan apasionados por la búsqueda como tú. Conectemos y trabajemos juntos para crear la experiencia mágica de búsqueda que te dará los resultados que deseas.

Pruébalo tú mismo