有什么方法可以从client.Search中检索所有结果。我认为这可以使用scroll API
完成,并在显示时为这些结果创建分页? ES是否有任何API可以这样做?
或者使用From()
和size()
,是否可以完成?
例如:让我们说,我在索引上有100,000个文档,当我搜索关键字时,它会生成大约200个结果。如何使用scroll,from和size来显示它们?
TIA
答案 0 :(得分:1)
我们使用from
和size
选项来实现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
from
和size
选项NOT scroll
。