开发者

django-haystack ordering - How do I handle this?

I'm using django-haystack for a search page on my site. I'm basica开发者_StackOverflow社区lly done, but not quite happy with the ordering and not quite sure how haystack decides how to order everything.

I know I can over-ride the SearchQuerySet by using order_by but that over-rides it entirely. Let's say I want to force the search to order by in stock (BooleanField), so that the products that are in stock show up on top, but then do everything else as it normally would. How do I do that?

I tried doing order_by('-in_stock', 'content') figure content was what it used by default but it produces very different results from if I just leave it to do its own ordering.

Thanks for any input on this matter!


You must have a index in your search_indexes.py with in_stock:

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

and in your urls:

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

In this way, you show the results first if they are in stock and then by score!


To sort on a CharField, make it storable, but not indexable.

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

If you need to have it sortable and indexable, use two different fields in the SearchIndex.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜