9

我正在使用 django-haystack 作为我网站上的搜索页面。我基本上完成了,但对订购不太满意,也不太确定 haystack 是如何决定如何订购所有东西的。

我知道我可以通过使用覆盖 SearchQuerySet ,order_by但这完全覆盖了它。假设我想强制搜索按库存 (BooleanField) 排序,以便库存产品显示在顶部,然后像往常一样执行其他所有操作。我怎么做?

我尝试order_by('-in_stock', 'content')使用默认情况下使用的图形内容,但它产生的结果与我只是让它自己排序时产生的结果截然不同。

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

4

2 回答 2

19

您的 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

这样,您首先显示有库存的结果,然后按分数显示结果!

于 2010-06-23T21:32:33.583 回答
2

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

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

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

于 2016-01-27T17:15:27.077 回答