Ein Filter ist keine schlechte Option, wenn Sie bereits einen relevanten Zeitstempel indizieren. Sie müssen diesen Zeitstempel auf der Client-Seite verfolgen, um Ihre Abfragen korrekt vorzubereiten. Sie müssen auch wissen, wann Sie es loswerden. Aber das sind keine unüberwindbaren Probleme.
Die Scroll-API ist dafür eine solide Option, da sie auf der Elasticsearch-Seite effektiv Snapshots erstellt. Die Absicht der Scroll-API besteht darin, eine stabile Suchabfrage für tiefe Paginierung bereitzustellen, die sich mit dem genauen Problem der Änderungen befassen muss, die bei Ihnen aufgetreten sind.
Sie beginnen eine Scrolling Search, indem Sie Ihre Abfrage und die scroll
Parameter, für die Elasticsearch eine scroll_id
zurückgibt. Sie stellen dann Anfragen an /_search/scroll
, die diese ID liefert, von denen jede eine Seite von Ergebnissen und eine neue scroll_id
für die nächste Anfrage zurückgibt.
(Beachten Sie, dass Sie nicht wollen die scan
Suche hier eingeben. Das verwendet wird Dokumente zu extrahieren en masse, und gelten keine Sortierung.)
Im Vergleich zu Filtern, tun Sie noch um einen Wert zu verfolgen: die scroll_id
für Ihre nächste Ergebnisseite. Ob das einfacher ist als das Verfolgen eines Zeitstempels hängt von Ihrer App ab.
Es gibt noch andere mögliche Nachteile zu berücksichtigen. Elasticsearch behält den Kontext für Ihre Suche auf einem einzelnen Knoten innerhalb des Clusters bei. Möglicherweise könnten sich diese in Ihrem Cluster ansammeln, abhängig davon, wie stark Sie sich auf die Scroll-Suche verlassen. Sie sollten die Auswirkungen auf die Leistung dort testen. Und wenn ich mich richtig erinnere, bleiben scrollende Suchen auch nach einem Knotenausfall oder -neustart bestehen.
Die ES-Dokumentation für die Scroll API bietet gute Details zu allen oben genannten.
Fazit: Filtern nach Zeitstempel ist eigentlich keine schlechte Wahl. Die Scroll-API ist eine weitere gültige Option, die für einen ähnlichen Anwendungsfall entwickelt wurde, aber nicht ohne Nachteile ist.
Danke für die detaillierte Erklärung. Aus irgendeinem Grund dachte ich scan/scroll war das gleiche, aber das stimmt natürlich nicht! Scroll scheint eine gute Wahl zu sein, wenn Sie nicht so etwas wie den neuesten Zeitstempel zum Filtern haben. – bradvido
Wäre der Nachteil bei der Zeitstempelfilterung, dass jemand, der ein Dokument löscht, möglicherweise ein Dokument überspringt, wenn es auf der nächsten Ergebnisseite zurückgegeben wird? – writofmandamus
Hinweis aus den Scroll-API-Dokumenten 'Scrolling ist nicht für Echtzeit-Benutzeranfragen gedacht,' – Ben