我有两台Haystack服务器:
当我从 Server2 向 Server1 发出查询时,我的问题是关于分页:
但这不是最优的,如果查询返回10.000个对象,查询将会很慢。
我知道您可以向查询中发送一些值(大小,从和到)但我不知道如果使用 Haystack 可以做到这一点,我已经检查过文档并用Google搜索并找不到任何内容。
SearchQuerySet()[10000:10010]
,它可能只会要求这10件物品吗? 我在Haystack Docs上找到了这个:
这似乎是我要做的事情的功能:
通过更改开始,结束或两个偏移来限制查询。
然后我试着这样做:
from haystack.query import SearchQuerySet
sqs = SearchQuerySet()
sqs.query.set_limits(low=0, high=4)
sqs.filter(content='anything')
结果是完整列表,就像我从未添加set_limit行一样
答案 0 :(得分:4)
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.
希望它有所帮助。
答案 1 :(得分:-1)
添加到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()