elasticsearch如何处理跳过请求(来自/ size参数)

时间:2014-05-21 15:25:06

标签: elasticsearch

我正在部署一种多次使用参数的方法。我希望了解'skip'在弹性搜索或其他类似系统中的工作原理,以判断它所带来的性能损失。

1 个答案:

答案 0 :(得分:2)

这取决于search type。如果您使用默认值query then fetch,然后获取大小为10(from: 190, size: 10)的第20页,则elasticsearch将:

  • 询问每个主要分片的前200个文档的ID和相关性分数(从与查询匹配的所有文档中选择,因此这意味着搜索整个索引,但这与仅获取第一页的相同)
  • 合并结果,按相关性排序,并跳过此类合并列表的190个热门点击,接下来的10个
  • 从相关分片中获取实际文档(即其中10条)

这意味着如果你有例如3个主要副本,然后elasticsearch节点需要交换有关3 * 200 = 600个文档的信息。有一些优化可以使获得特别“远程”页面的效率更高,但简而言之,每次获取下一页时都需要处理越来越多的文档。

如果您的用例涉及按顺序浏览结果集,请考虑scrolling