如何基于client创建分页。搜索结果Elasticsearch Nest

时间:2016-06-16 02:02:12

标签: c# elasticsearch pagination nest

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

或者使用From()size(),是否可以完成?

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

TIA

1 个答案:

答案 0 :(得分:1)

我们使用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数据。在这种情况下,您可能只需使用query fromsize选项NOT scroll