首页 > 解决方案 > 弹性搜索返回相同的滚动 ID

问题描述

弹性搜索为每个请求返回相同的滚动 ID ,但数据状态不同。它适用于分页。

但是我需要在我的堆栈中维护滚动 ID,所以我可以向上/向下滚动所有文档 a/c 到分页,一次 10 个文档。我需要根据要求避免/减少/优化浏览器内存以仅包含 10 个文档而不是所有文档。

例如

第一个请求给我 10(1-10) 个滚动 ID为 scroll_id_1 的文档。我把它推到我的堆栈中。

第二个请求给我接下来的 10(11-20) 个具有最近滚动 ID的文档,即 scroll_id_1 再次给我新的滚动 ID scroll_id_1。我把它推到我的堆栈中。

现在,如果我想向上滚动查看前 10(1-10) 个文档的滚动 ID scroll_id_1,请给我新的下 10(21-30) 个文档。这是问题有没有办法解决这个问题?生成自定义滚动 ID,以便我可以轻松地向上/向下滚动 a/c 以满足我的要求。

我在 Elastic Search 的官方文档上读到这个似乎是不可能的。 在此处输入图像描述

标签: elasticsearchinfinite-scrollelasticsearch-dsl

解决方案


首先,Scroll API 不应该用于实时分页,它仅用于批量分页。

其次,Scroll API 仅用作向前分页,不支持向前/向后分页。

您应该调查更轻量级并允许来回分页的分页...它还允许您使用时间点保留search_after索引状态

此外,如果您滚动的距离不超过前 10000 个文档,那么您只需要from/size分页


推荐阅读