Разверните результаты поиска в стоге сена с фасетами, но не меняйте их. - PullRequest
2 голосов
/ 01 августа 2011

У меня есть результаты поиска с параметрами фасета для детализации данных. Когда фасет выбран, он изменяет результаты фасета. Так что, если я изначально показываю «места (10)», «изображения (5)», «люди (3)» и «Все (18)» в качестве параметров огранки, и я нажимаю на изображения, я все равно хотел бы видеть все другие тоже, хотя результаты поиска изменились. Есть ли хороший способ сделать это?

Ответы [ 2 ]

7 голосов
/ 12 сентября 2011

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

Вот мой действительный рабочий код:

from haystack.views import FacetedSearchView

class StickyFacetedSearchView (FacetedSearchView):

    def top_level_facets(self):
        """
        When selecting a facet to drill down the results, 
        we need to keep the top level facet counts
        """
        stored_query = self.request.session.get('query', None)

        if stored_query != self.query:
            self.request.session['query'] = self.query
            self.request.session['facet_counts'] = self.results.facet_counts()

        return self.request.session['facet_counts'] # Fail loudly

    def extra_context(self):
        """ add base_facets to extra_context"""
        extra = super(StickyFacetedSearchView, self).extra_context()
        extra['base_facets'] = self.top_level_facets()
        return extra

Вставьте приведенный выше вид в приложение под названием «mysearch» или аналогичное, а затем используйте mysearch.StickyFacetedSearchView в urls.py вместо FacetedSearchView.

Чтобы получить к ним доступ, используйте base_facets в шаблоне, а не facets.

Он отлично работает.

1 голос
/ 01 августа 2011

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

...