【发布时间】:2019-12-29 17:53:00
【问题描述】:
在 elasticsearch 中的 search after 必须在 count 和 order 上匹配其排序参数。所以我想知道如何从以前的结果(示例第 1 页)中获取分数,以将其用作下一页之后的搜索。 在之前的搜索中使用最后一个文档的分数时,我遇到了一个问题。分数为 1.0,由于所有文档的分数均为 1.0,因此下一页的结果结果为 null(空)。
这实际上是有道理的,因为我向 elasticsearch 询问排名(分数)低于 1.0 且为零的结果,所以我使用哪个分数来获取下一页。
注意: 我按分数排序,然后按 TieBreakerID 排序,因此一种可能的解决方案是使用高值(例如 1000)作为分数。
【问题讨论】:
-
为什么不能使用from参数在offset处得到结果?
-
出于性能原因,我的情况下不能使用 from 和 size,根据此文档:elastic.co/guide/en/elasticsearch/reference/current/…
-
您确定按分数搜索会更快吗?另外,请注意,根据文档,分数是不可重现的(假设没有解决方法)。这意味着您的方法可能行不通。 elastic.co/guide/en/elasticsearch/reference/current/…
-
我完全同意丹尼斯的观点,每个请求的分数可能不同,这使得它作为搜索后参数不可靠。那么在按相关性排序时,您建议使用什么进行分页?
-
这取决于您的用例。在搜索中,很少需要查看前几页。如果您不看前几页,“发件人”就可以了。看看 Scroll API,它允许您有效地遍历整个数据集。请注意,保持滚动上下文活动的成本很高,因此它并不是真正用于分页,更多的是用于迭代。但是,您可以使用滚动 api 将结果缓存到您的应用程序吗?除此之外,我认为没有其他支持的方法。如果这不能解决您的用例,请告诉我。
标签: elasticsearch search