Haystack 和 Elasticsearch:限制结果数量

Haystack and Elasticsearch: Limit number of results

我有 2 个带有 Haystack 的服务器:

当我从 Server2 查询到 Server1:

时,我的问题是关于分页的

但这不是最优的,如果查询return10.000个对象,查询会很慢。

我知道您可以向 elasticsearch 发送查询中的一些值(sizefromto) 但我不知道使用 Haystack 是否可行,我检查了文档并用谷歌搜索,但一无所获。

编辑

编辑2

我在 Haystack 文档上找到了这个:

它似乎是一个可以做我想做的事情的函数:

Restricts the query by altering either the start, end or both offsets.

然后我尝试这样做:

from haystack.query import SearchQuerySet

sqs = SearchQuerySet()
sqs.query.set_limits(low=0, high=4)
sqs.filter(content='anything')

结果是完整列表,就像我从来没有添加 set_limit 行一样

Haystack 的工作方式与 Django ORM 有点不同。限制查询集后,您应该调用 get_results() 以获得有限的结果。这实际上很聪明,因为它避免了来自 Elastic 的多次请求。

示例:

# Assume you have 800 records.
sqs = SearchQuerySet()
sqs.query.set_limits(low=0, high=4)
len(sqs)  # Will return 800 records
len(sqs.get_results())  # Will return first 4 records.

希望对您有所帮助。

添加到 Yigit 答案中,如果你想在过滤记录上有这些偏移量,只需在形成 SearchQuerySet 时添加过滤条件。

另请记住,一旦设置了限制,您就无法通过再次设置来更改它们。您需要再次形成 SearchQuerySet(),或者有一种方法可以清除限制。

results = SearchQuerySet().filter(content="keyword")
#we have a filtered resultSet now let's find specific records
results.query.set_limits(0,4)
return results.query.get_results()