代码之家  ›  专栏  ›  技术社区  ›  Sunny Agarwal

从特定文档开始的弹性搜索分页

  •  0
  • Sunny Agarwal  · 技术社区  · 3 年前

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

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

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

    有更好的方法吗?

    0 回复  |  直到 3 年前
        1
  •  0
  •   Dhiresh Jain    3 年前

    您可以使用 scroll api 为您的搜索查询获取分页结果。

    或者,您可以使用 search_after api 这似乎对大量结果表现更好,但它仅适用于7.x+弹性版本。

        2
  •  0
  •   josephkibe    3 年前

    我不完全确定我自己没有测试过,但我认为使用 search after API 这是我们应该走的路。

    你需要使用类似的东西 point in time feature ,这就是搜索后使用的。没有它,您无法保证数据库中的数据不会发生变化。如果数据发生变化,那么您的搜索结果可能会发生变化。如果这种情况发生了变化,那么“下一步”也会发生变化,这可能不再符合你想要的。

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

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

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

    你最好将人们可以浏览的项目数量限制在较大但可管理的范围内,然后在有人浏览到最后时重新加载一个新页面。如果你最初拉取了500个产品,有人走到了最后(在我看来,这似乎不太可能),你可以重新发布搜索,向前翻页500个项目,在边界处消除重复,没有人会更聪明。