我的Haystack有2台服务器:

  • Server1 :这已安装了Elasticsearch
  • Server2 :这没有 Elasticsearch ,查询是对 Server1

  • 我的问题是从 Server2 Server1 进行查询时的分页:
  • Server2 Server1进行查询
  • Server1 将所有结果发送回 Server2
  • Server2 使分页

  • 但这不是最佳选择,如果查询返回10.000个对象,查询将很慢。
    我知道您可以将一些查询中的值(大小发送到)发送给elasticsearch,但是我不知道是否可以使用 Haystack 来实现,我已经检查了文档并将其谷歌搜索一无所获。
  • 我如何在 Haystack 中配置查询以接收10乘10的结果?

  • 编辑
  • 如果我制作SearchQuerySet()[10000:10010],是否可能只要求这10个项目?
  • 还是会要求所有项目然后进行过滤?

  • 编辑2
    我在Haystack Docs上找到了这个:
  • SearchQuery API - set_limits

  • 似乎有一个功能可以做我想做的事情:

    然后我尝试去做:
    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.
    

    希望对您有所帮助。

    关于django - 干草堆和Elasticsearch : Limit number of results,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27777766/

    10-13 00:50