首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElasticSearch文档说不对用户请求使用滚动,只对数据转换使用滚动。

ElasticSearch文档说不对用户请求使用滚动,只对数据转换使用滚动。
EN

Stack Overflow用户
提问于 2014-08-22 20:27:42
回答 3查看 9.9K关注 0票数 13

我是ES的新手,对它的卷轴文档感到困惑。“滚动不是用于实时用户请求,而是用于处理大量数据,例如,为了将一个索引的内容重新索引为具有不同配置的新索引”。

并且yet...further在同一页上,它说不要使用from()和size()进行分页,因为它“效率很低”。在描述搜索的Java页面上,它展示了一个通过Scroll分页的示例。

因此,假设我想显示排序的搜索结果,一次只显示一个页面,建议采用哪种方法:从/size还是滚动?

EN

回答 3

Stack Overflow用户

发布于 2014-08-22 21:57:48

当您想要执行from/size深度分页或您想逐页请求大量结果时,效率很低。

原因是结果首先在每个碎片上排序,然后所有这些结果都由请求协调器节点收集、合并和排序。这变得越来越昂贵,因为页面的大小或排名都在增长。你会发现一个很好的例子,记录在这里

您可以限制用户查询的大小(例如,大约是1000个结果),使用from/size就可以了。

如果它不是一个选项,您仍然可以使用滚动,但是您将失去一些特性,比如聚合和保持搜索上下文的活动是有代价的。

票数 8
EN

Stack Overflow用户

发布于 2017-01-12 23:24:27

您可以使用search_after。基本流程如下:

  1. 执行常规搜索,按日期返回排序的文档结果数组。
  2. 使用正文中的search_after字段执行下一个查询,告诉Elasticsearch只在指定的文档(日期)之后返回文档。

这样,您的结果将对任何更新或文档删除保持可靠,并保持准确。您还可以避免滚动成本 (可能已经阅读过)和来自/规模方法从初始文档结果开始对每个查询的线性时间操作成本。

有关更多信息和实现细节,请参见文档

票数 5
EN

Stack Overflow用户

发布于 2014-08-23 00:28:36

滚动和大小都受到深度分页的影响。您可以尝试一种混合方法,方法是在更大的步骤中进行分页(例如,一次分页100个条目),但是将UI显示在较小的批中(即只有10个)。当用户继续转到页面时,在某个时候,当用户被占用时,您应该触发下一批的另一个后台搜索任务。如果您跟踪这些会话并大致了解用户搜索的深度,您可以找到理想的结果集大小,并在这些步骤中滚动。

在这两者之间,我有更好的滚动经验,而不是从响应时间/大小,但YMMV。可归结为数据、碎片设置等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25455088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档