Ответы пользователя по тегу Haystack
  • Django-haystack не по поддерживает 1.9 django?

    @skorpix
    Я тоже когда обновлялся до django 1.9, столкнулся с проблемой, что результаты поиска есть, но объект недоступен, отваливался с ошибкой Model could not be found for SearchResult.
    Данный случай, как мне кажется, очень похож на мой. Свою проблему я решил так.
    Вначале удалил haystack: pip uninstall django-haystack
    Затем установил его, используя коммит, который не вошел в ветку 2.4.1
    -e git://github.com/django-haystack/django-haystack.git@f1ed18313777005dd77ed724ecbfb27c0b03cad8#egg=haystack
    Ответ написан
    Комментировать
  • Как в SearchQuerySet запросе haystack использовать queryset?

    @skorpix
    Я, конечно, может и некропостер, но, мне кажется, что это должно делаться следующим образом (вдруг кому этот ответ пригодится):
    table_ids = Table.objects.filter(table_field = field).values_list('id', flat=True)
    SearchQuerySet().filter(table_field__in = table_ids)

    Не проверял на правильность и корректность.
    Ответ написан
    Комментировать
  • Haystack+Solr: Как настроить фасетный поиск, чтобы он работал методом "OR"?

    @skorpix Автор вопроса
    Решение (вдруг кому пригодится) (у меня здесь еще сделано, что если поисковая строка не задана, то выдаются все результаты):
    from collections import defaultdict
    
    from haystack.forms import FacetedSearchForm
    
    
    class FacetedNotEmptySearchForm(FacetedSearchForm):
    
        def no_query_found(self):
            return self.searchqueryset.all()
    
        @property
        def selected_multi_facets(self):
            selected_multi_facets = defaultdict(list)
            for facet_kv in self.selected_facets:
                if ":" not in facet_kv:
                    continue
                field_name, value = facet_kv.split(':', 1)
                selected_multi_facets[field_name].append(value)
            return selected_multi_facets
    
        def search(self):
            sqs = super(FacetedSearchForm, self).search()
            for field, values in self.selected_multi_facets.items():
                if not values:
                    continue
                clean_values = ['"%s"' % sqs.query.clean(val) for val in values]
                sqs = sqs.narrow(u'%s:(%s)' % (field, " OR ".join(clean_values)))
            return sqs
    Ответ написан
    Комментировать