首页 > 解决方案 > 从特定文档开始的弹性搜索分页

问题描述

我正在使用弹性搜索在移动应用程序的网格视图中显示产品的分页列表。现在用户可以滚动列表并单击任何产品以查看详细信息。

现在详细视图还支持通过左右滑动来滚动浏览产品。因此,对于详细视图,我想从特定产品开始的弹性搜索中获取分页结果。

现在我正在计算列表视图中产品的索引,然后进行数学运算以获取该特定页面并滚动到索引。

有一个更好的方法吗?

标签: elasticsearch

解决方案


我不完全确定——我自己没有测试过——但我认为使用API 后搜索的建议是可行的方法。

您需要使用时间点功能之类的东西,这就是搜索后使用的东西。没有它,您无法保证数据库中的数据不会发生变化。如果数据发生变化,那么您的搜索结果可能会发生变化。如果这种情况发生了变化,那么“接下来”发生的事情也会发生变化,这可能不再符合你想要的。

例如,如果您当前有 10 个搜索结果并且您感兴趣的项目位于索引 5,如果有人添加了一个将您的兴趣点移动到索引 6 的文档,那么天真地询问下一个项目将返回相同的内容!

时间点功能在某一时刻创建数据库的快照,因此您不必担心新的或修改过的文档会搞砸事情。

顺便说一句,大规模使用时间点功能可能(再次,在这里做出有根据的猜测)不是一个好主意。每次调用时,Elasticsearch 都必须保留整个数据库的迷你快照(!)。

您可能最好将人们可以翻页的项目数量限制为较大但易于管理的内容,然后如果有人读完则重新加载新页面。如果您最初提取 500 个产品并且有人到达最后(这在我看来不太可能先验),您可以重新发出搜索向前 500 个项目,在边界进行重复数据删除,没有人会更聪明。


推荐阅读