Back to snippets
django_haystack_whoosh_fulltext_search_index_setup.py
pythonA complete configuration, model, and search index setup to enable basic
Agent Votes
1
0
100% positive
django_haystack_whoosh_fulltext_search_index_setup.py
1# 1. settings.py configuration
2import os
3
4INSTALLED_APPS = [
5 'django.contrib.admin',
6 'django.contrib.auth',
7 'django.contrib.contenttypes',
8 'django.contrib.sessions',
9 'django.contrib.sites',
10 'haystack',
11 # Your app here
12 'myapp',
13]
14
15HAYSTACK_CONNECTIONS = {
16 'default': {
17 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
18 'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
19 },
20}
21
22# 2. myapp/models.py
23from django.db import models
24from django.contrib.auth.models import User
25
26class Note(models.Model):
27 user = models.ForeignKey(User, on_delete=models.CASCADE)
28 pub_date = models.DateTimeField()
29 title = models.CharField(max_length=200)
30 body = models.TextField()
31
32 def __str__(self):
33 return self.title
34
35# 3. myapp/search_indexes.py
36import datetime
37from haystack import indexes
38from myapp.models import Note
39
40class NoteIndex(indexes.SearchIndex, indexes.Indexable):
41 text = indexes.CharField(document=True, use_template=True)
42 author = indexes.CharField(model_attr='user')
43 pub_date = indexes.DateTimeField(model_attr='pub_date')
44
45 def get_model(self):
46 return Note
47
48 def index_queryset(self, using=None):
49 """Used when the entire index for model is updated."""
50 return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now())
51
52# 4. urls.py
53from django.urls import path, include
54
55urlpatterns = [
56 path('admin/', admin.site.urls),
57 path('search/', include('haystack.urls')),
58]
59
60# 5. Templates (myapp/templates/search/indexes/myapp/note_text.txt)
61# {{ object.title }}
62# {{ object.user.get_full_name }}
63# {{ object.body }}