我正在尝试找出如何使用Elasticsearch通过多匹配查询完成分页。
scroll
和search_after
API似乎无法使用。根据{{3}},scroll
并非实时用户请求。 search_after
每个ID都需要一个唯一的字段,并要求您按照documentation在该字段上进行排序,但是使用多重匹配查询时,您基本上是按照得分进行排序。
因此,到目前为止,我唯一想到的就是执行以下操作:
发回最后一个文档ID +分数,并将该分数用作排序字段。但是,如果在两个查询之间添加了其他文档,则可能会返回重复的文档。
答案 0 :(得分:0)
如果要分页,第一种选择是在查询中使用from
和size
参数。 The documentation here
可以使用from和size分页结果 参数。 from参数定义相对于第一个的偏移量 您想获取的结果。 size参数允许您配置 返回的最大匹配数。
尽管from和size可以设置为请求参数,但它们也可以 在搜索正文中设置。从默认设置为0,大小默认设置 到10。
请注意from + size不能大于索引。max_result_window 索引设置,默认为10,000。请参阅“滚动”或“之后搜索” 使用API进行深度滚动的更有效方法。
如果您不需要分页显示超过10k的结果,那是您的最佳选择。 max_result_window
可以修改,但是性能会随着所选页数的增加而降低。
但是,当然,如果在用户分页期间添加了一些文档,则会添加它们,并且您的分页可能会有些不准确。