Es ist oft unpraktisch für eine Anwendung, eine sehr große Anzahl von Ergebnissen zu verarbeiten. Aus diesem Grund verwenden APIs und Webdienste Paginierungssteuerungen , um Anwendungen zu ermöglichen, die Ergebnisse in kleinen Abschnitten oder Seiten anzufordern.
Möglicherweise ist Ihnen aufgefallen, dass Elasticsearch standardmäßig nicht mehr als 10 Ergebnisse zurückgibt. Der optionale Parameter size kann in einer Suchanfrage angegeben werden, um diesen Maximalwert zu ändern. Das folgende Beispiel fordert die Rückgabe von bis zu 5 Suchergebnissen an:
Um auf weitere Ergebnisseiten zuzugreifen, wird der Parameter from_ verwendet, der angibt, ab welcher Position in der vollständigen Ergebnisliste zu beginnen ist (da from ein reserviertes Schlüsselwort in Python ist, wird from_ verwendet).
Das nächste Beispiel ruft eine zweite Seite mit 5 Ergebnissen ab:
Lasst uns size und from_ in den Endpunkt handle_search() in app.py einbinden:
Hier ist die Seitengröße fest auf 5 eingestellt (Sie können gerne eine andere Zahl Ihrer Wahl verwenden). Das Argument from_ wird als zusätzliches Feld im übermittelten Formular angenommen, ist aber optional und hat standardmäßig den Wert 0, wenn es nicht vorhanden ist.
Das Suchformular in der Datei index.html verfügt nicht über ein from_ -Feld, daher beginnen reguläre Suchvorgänge immer beim ersten Ergebnis. Die Vorlage zeigt Informationen über die Bandbreite der angezeigten Ergebnisse und die Gesamtsumme an. So funktioniert das mithilfe von Template-Ausdrücken:
Die Vorlage enthält außerdem eine Logik zur Anzeige von Navigationsschaltflächen, mit denen man in der Ergebnisliste vorwärts oder rückwärts navigieren kann. Hier ist die Implementierung der Schaltfläche „Vorherige Ergebnisse“:
Wie Sie sehen können, wird die Schaltfläche "Vorherige Seite" nur dann auf der Seite angezeigt, wenn from_ größer als Null ist. Die Implementierung dieser Schaltfläche nutzt die History API des Browsers, um eine Seite zurückzugehen.
Die Schaltfläche „Nächste Seite“ ist wesentlich interessanter implementiert:
Bei diesem Button handelt es sich eigentlich nicht um einen eigenständigen Button, sondern um ein komplettes Formular mit zwei versteckten Feldern zusätzlich zum Button. Das Formular ähnelt dem Hauptsuchformular, enthält aber das optionale Feld from_ , das so angepasst ist, dass es auf die nächste Ergebnisseite verweist. Wenn diese Schaltfläche angeklickt wird, empfängt die Flask-Anwendung eine Suchanfrage von diesem alternativen Formular, die die gleiche Textabfrage verwendet, jedoch einen Wert ungleich Null from_ .
Mit dieser kleinen und cleveren Implementierung der Paginierung können Sie durch mehrere Ergebnisseiten navigieren.
Vorher
Grundlagen der SucheNächste
Filter