我是ES的新手,对它的卷轴文档感到困惑。“滚动不是用于实时用户请求,而是用于处理大量数据,例如,为了将一个索引的内容重新索引为具有不同配置的新索引”。
并且yet...further在同一页上,它说不要使用from()和size()进行分页,因为它“效率很低”。在描述搜索的Java页面上,它展示了一个通过Scroll分页的示例。
因此,假设我想显示排序的搜索结果,一次只显示一个页面,建议采用哪种方法:从/size还是滚动?
发布于 2014-08-22 21:57:48
当您想要执行from/size深度分页或您想逐页请求大量结果时,效率很低。
原因是结果首先在每个碎片上排序,然后所有这些结果都由请求协调器节点收集、合并和排序。这变得越来越昂贵,因为页面的大小或排名都在增长。你会发现一个很好的例子,记录在这里。
您可以限制用户查询的大小(例如,大约是1000个结果),使用from/size就可以了。
如果它不是一个选项,您仍然可以使用滚动,但是您将失去一些特性,比如聚合和保持搜索上下文的活动是有代价的。。
发布于 2017-01-12 23:24:27
发布于 2014-08-23 00:28:36
滚动和大小都受到深度分页的影响。您可以尝试一种混合方法,方法是在更大的步骤中进行分页(例如,一次分页100个条目),但是将UI显示在较小的批中(即只有10个)。当用户继续转到页面时,在某个时候,当用户被占用时,您应该触发下一批的另一个后台搜索任务。如果您跟踪这些会话并大致了解用户搜索的深度,您可以找到理想的结果集大小,并在这些步骤中滚动。
在这两者之间,我有更好的滚动经验,而不是从响应时间/大小,但YMMV。可归结为数据、碎片设置等。
https://stackoverflow.com/questions/25455088
复制相似问题