django-haystack ordering - Как мне справиться с этим? - PullRequest
8 голосов
/ 08 июня 2010

Я использую django-haystack для страницы поиска на моем сайте.Я в основном закончил, но не совсем доволен упорядочиванием и не совсем уверен, как стог сена решает, как упорядочить все.

Я знаю, что могу переопределить SearchQuerySet с помощью order_by, но это переопределяетэто целиком.Допустим, я хочу заставить поиск упорядочить по наличию на складе (BooleanField), чтобы товары, имеющиеся в наличии, отображались сверху, а затем делали все остальное, как обычно.Как мне это сделать?

Я пытался сделать order_by('-in_stock', 'content') содержимое рисунка, которое использовалось по умолчанию, но оно дает очень разные результаты, если я просто оставляю его для выполнения собственного заказа.

Спасибо за любой вклад по этому вопросу!

Ответы [ 2 ]

18 голосов
/ 24 июня 2010

У вас должен быть индекс в вашем search_indexes.py с in_stock:

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

и в ваших URL:

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

Таким образом, вы сначала показываете результаты, если они есть в наличии, а затем по баллам!

2 голосов
/ 27 января 2016

Чтобы сортировать на CharField, сделайте его хранимым, но не индексируемым.

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

Если вам нужно, чтобы он сортировался и индексировался, используйте два разных поля в SearchIndex.

...