如何根据 client.Search 个结果创建分页 Elasticsearch Nest

How to create pagination based on client.Search results Elasticsearch Nest

有什么方法可以从 client.Search 检索所有结果(我认为这可以使用 scroll API 完成)并在显示这些结果时为这些结果创建分页? ES 是否有任何 API 这样做?

或者用From()size(),可以吗?

例如:比方说,我在索引上有 100,000 个文档,当我搜索关键字时,它会生成大约 200 个结果。如何使用 scroll、from 和 size 来显示它们?

TIA

我们使用 fromsize 选项来实现 Elasticsearch 结果的分页。 代码片段可以如下所示:

def query(page)
  size = 10
  page ||= 1
  from = (page-1) * size 

  # elasticsearch query with from * size options
end 

您可能需要知道结果总数才能实现分页,而无需发送额外的计数请求。要获得总结果,您可以使用响应的 total 字段。

=== 已更新

如果你想得到第一页的搜索结果,那么你可以使用query(1)。如果你想得到第二页的搜索结果,那么你可以使用query(2)等等。

scroll 的目的略有不同。假设您需要获取搜索结果的所有记录并且结果数量太大(例如,数百万个结果)。如果一次检索所有数据,则会由于高负载而出现内存问题或问题。在这种情况下,您可以使用 scroll 逐步获取结果。

对于分页,您不需要获取搜索结果的所有数据。您只需要获取特定页面的 some 数据。在这种情况下,您可能只需要将 queryfromsize 选项一起使用,而不是 scroll.