django-haystack order - 我该如何处理?

时间:2010-06-08 17:49:06

标签: django search django-haystack

我在我的网站上使用django-haystack搜索页面。我基本上已经完成了,但对排序不太满意,并且不太确定haystack如何决定如何订购。

我知道我可以使用order_by来覆盖SearchQuerySet,但这完全超越了它。假设我想强制搜索按库存(BooleanField)进行排序,以便库存中的产品显示在顶部,但随后会像通常那样执行其他操作。我该怎么做?

我试过做order_by('-in_stock', 'content')数字内容是它默认使用的内容,但它会产生非常不同的结果,如果我只是让它做自己的排序。

感谢您对此事的任何意见!

2 个答案:

答案 0 :(得分:18)

您的search_indexes.py中必须有一个带有in_stock的索引:

class YourModel(indexes.SearchIndex):
    in_stock = indexes.BooleanField(model_attr='model_in_stock')

并在您的网址中:

sqs = SearchQuerySet().models(YourModel).order_by('-in_stock', 'score') # score is a field of haystack

通过这种方式,您可以先显示结果,如果它们有库存,然后按分数显示!

答案 1 :(得分:2)

要对CharField进行排序,请使其可存储,但不可编入索引。

sorted_name = indexes.CharField(indexed=False, stored=True)

如果您需要对其进行排序和索引,请在SearchIndex中使用两个不同的字段。