Поиск в одной модели с помощью джойстика

Я использую haystack для полного поиска по сайту в моем проекте, который ищет модели книг, авторов, событий и видео.

Затем у меня есть главная страница книги, где я хочу искать только против модели Books.

Я нашел этот пост: Как вернуть только индексированные объекты определенного типа в Haystack

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

мой файл search_indexes.py выглядит так:

class BookSearchIndex (SearchIndex):
 text = CharField(document=True, use_template=True)
 title_web = CharField(model_attr='title_web', boost=1.125)
 on_sale_date = CharField(model_attr='on_sale_date')
 def index_queryset(self):
 return Book.objects.active().filter(publish_level='published')
site.register(Book, BookSearchIndex)

И, на мой взгляд, если был пройден поисковый запрос, верните только книги с этим запросом, иначе покажите все книги:

search = self.request.GET.get('search', None)
if search:
 clean_query = SearchQuerySet().query.clean(search)
 sqs = SearchQuerySet().models(Book).filter(content=clean_query).order_by('-on_sale_date')
else:
 sqs = SearchQuerySet().models(Book).order_by('-on_sale_date)

Поиск правильно фильтрует элемент на основе поискового запроса, но он все еще возвращает все модели. Это не ограничивает его только моделью книги.

Кажется, что эта часть не действует:

SearchQuerySet().models(Book)

Может кто-нибудь помочь мне выяснить, что я делаю неправильно?

1 ответ

Я понял это. Я пытался использовать простой поиск для тестирования локально, потому что у нас еще не было настройки solr.

Использование функции .models() не работает с простым бэкэнд.

licensed under cc by-sa 3.0 with attribution.