Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Django haystack  (gelezen 867 keer)

Offline MKe

  • Lid
Django haystack
« Gepost op: 2012/08/13, 13:49:33 »
Heeft iemand ervaring met haystack in django? Ik ben hiermee bezig, maar het is me nogal onduidelijk. Ik heb de getting started tutorial van Haystack uitgevoerd en kan nu wel zoeken op hele woorden.

Ik probeer de enige zover te krijgen dat hij ook gedeeltelijke keywords kan vinden. Dus als de gebruiker zoekt op "ubu" on "unt" dat hij ook de therm ubuntu vind.  Het is me helaas nog niet gelukt. Ik gebruik de Whoosh search engine. Na veel googelen begrijp ik dat ik de autocomplete functie moet gebruiken en de documentatie zegt dan dat ik de query als volgt kan uitvoeren:
from haystack.query import SearchQuerySet

sqs = SearchQuerySet().filter(content_auto=request.GET.get('q', ''))
http://django-haystack.readthedocs.org/en/v1.2.7/autocomplete.html
Maar waar zet ik deze code neer dan? Moet ik een eigen view schrijven?

Edit: volgens http://stackoverflow.com/questions/9163388/django-haystack-autocomplete zou ik een wrapper view moeten maken. Maar de gegeven methode lijkt bij mij niet te werken. Ik krijg nu helemaal geen resultaten meer.

« Laatst bewerkt op: 2012/08/13, 14:35:57 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline MKe

  • Lid
Re: Django haystack
« Reactie #1 Gepost op: 2012/08/14, 13:14:23 »
OKay, dit was een moeilijke om te vinden. Het blijkt dat het het beste is om een nieuwe form te maken en deze te gebruiken met een view:

De form (in dit geval geerfd van ModelForm:
class MySearch(SearchForm):
    def search(self):
        if not self.is_valid():
            return self.no_query_found()

        if not self.cleaned_data.get('q'):
            return self.no_query_found()

        sqs = self.searchqueryset.filter(content_auto=self.cleaned_data['q'])
        sqs = super(MySearch,self).search() | sqs
        if self.load_all:
            sqs = sqs.load_all()

        return sqs

En in de url.py:
urlpatterns += patterns('haystack.views',
    url(r'^search/$', SearchView(form_class=MySearch ), name='haystack_search'),
)

De searchindex moet dan het volgende veld bevatten:
content_auto = indexes.EdgeNgramField(model_attr='name')Nu zoekt hij partieel op naam, dus halve namen kan ook.