我在我的网站上使用django-haystack搜索页面。我基本上已经完成了,但对排序不太满意,并且不太确定haystack如何决定如何订购。
我知道我可以使用order_by
来覆盖SearchQuerySet,但这完全超越了它。假设我想强制搜索按库存(BooleanField)进行排序,以便库存中的产品显示在顶部,但随后会像通常那样执行其他操作。我该怎么做?
我试过做order_by('-in_stock', 'content')
数字内容是它默认使用的内容,但它会产生非常不同的结果,如果我只是让它做自己的排序。
感谢您对此事的任何意见!
答案 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中使用两个不同的字段。