Haystack和Elasticsearch:限制结果数量

Alv*_*oAV 6 django pagination django-haystack elasticsearch

我有两台Haystack服务器:

  • Server1:已安装elasticsearch
  • Server2:这没有elasticsearch,查询是对Server1进行的

当我从Server2Server1发出查询时,我的问题是关于分页:

  • Server2Server1发出查询
  • Server1将所有结果发送回Server2
  • Server2进行分页

但这不是最优的,如果查询返回10.000对象,查询将会很慢.

我知道你可以向查询中发送一些值的弹性搜索(大小,)但我不知道这是否可以使用Haystack,我检查了文档并用Google搜索并没有发现任何内容.

  • 如何在Haystack中配置查询以接收10×10的结果?

编辑

  • 有可能,如果我做SearchQuerySet()[10000:10010]它只会要求这10项?
  • 或者它会询问所有项目然后过滤它们?

EDIT2

我在Haystack Docs上找到了这个:

它似乎是一个功能,做我正在尝试做的事情:

通过更改开始,结束或两个偏移来限制查询.

然后我试着做:

from haystack.query import SearchQuerySet

sqs = SearchQuerySet()
sqs.query.set_limits(low=0, high=4)
sqs.filter(content='anything')
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不工作?

Yiğ*_*ler 5

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.
Run Code Online (Sandbox Code Playgroud)

希望有帮助。