Haystack indexing error
Question: I am trying to implement haystack [tutorial](https://django-
haystack.readthedocs.org/en/latest/tutorial.html#installation) : But i am
facing problems :

If i already have data in my DB and try to build index using :

`python manage.py rebuild_index` it gives the following error :

    
    
    vaibhav@ubuntu:~/temp/HayStackDemo$ python manage.py rebuild_index -v2
    
    WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'.
    Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
    Are you sure you wish to continue? [y/N] y
    
    Removing all documents from your index because you said so.
    All documents removed.
    Skipping '<class 'django.contrib.auth.models.Permission'>' - no index.
    Skipping '<class 'django.contrib.auth.models.Group'>' - no index.
    Skipping '<class 'django.contrib.auth.models.User'>' - no index.
    Skipping '<class 'django.contrib.contenttypes.models.ContentType'>' - no index.
    Skipping '<class 'django.contrib.sessions.models.Session'>' - no index.
    Skipping '<class 'django.contrib.sites.models.Site'>' - no index.
    Skipping '<class 'django.contrib.admin.models.LogEntry'>' - no index.
    Indexing 1 notes
      indexed 1 - 1 of 1 (by 30508).
    ERROR:root:Error updating demoApp using default 
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 210, in handle_label
        self.update_backend(label, using)
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 256, in update_backend
        do_update(backend, index, qs, start, end, total, self.verbosity)
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 78, in do_update
        backend.update(index, current_qs)
      File "/usr/local/lib/python2.7/dist-packages/haystack/backends/elasticsearch_backend.py", line 155, in update
        prepped_data = index.full_prepare(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 196, in full_prepare
        self.prepared_data = self.prepare(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 187, in prepare
        self.prepared_data[field.index_fieldname] = field.prepare(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 152, in prepare
        return self.convert(super(CharField, self).prepare(obj))
      File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 73, in prepare
        return self.prepare_template(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 129, in prepare_template
        t = loader.select_template(template_names)
      File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 193, in select_template
        raise TemplateDoesNotExist(', '.join(not_found))
    TemplateDoesNotExist: search/indexes/demoApp/note_text.txt
    Traceback (most recent call last):
      File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
        utility.execute()
      File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
        self.execute(*args, **options.__dict__)
      File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
        output = self.handle(*args, **options)
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/rebuild_index.py", line 15, in handle
        call_command('update_index', **options)
      File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 150, in call_command
        return klass.execute(*args, **defaults)
      File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
        output = self.handle(*args, **options)
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 184, in handle
        return super(Command, self).handle(*items, **options)
      File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 341, in handle
        label_output = self.handle_label(label, **options)
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 210, in handle_label
        self.update_backend(label, using)
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 256, in update_backend
        do_update(backend, index, qs, start, end, total, self.verbosity)
      File "/usr/local/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 78, in do_update
        backend.update(index, current_qs)
      File "/usr/local/lib/python2.7/dist-packages/haystack/backends/elasticsearch_backend.py", line 155, in update
        prepped_data = index.full_prepare(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 196, in full_prepare
        self.prepared_data = self.prepare(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/indexes.py", line 187, in prepare
        self.prepared_data[field.index_fieldname] = field.prepare(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 152, in prepare
        return self.convert(super(CharField, self).prepare(obj))
      File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 73, in prepare
        return self.prepare_template(obj)
      File "/usr/local/lib/python2.7/dist-packages/haystack/fields.py", line 129, in prepare_template
        t = loader.select_template(template_names)
      File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 193, in select_template
        raise TemplateDoesNotExist(', '.join(not_found))
    django.template.base.TemplateDoesNotExist: search/indexes/demoApp/note_text.txt
    

And if i remove all of the data and then try i get this :

    
    
    vaibhav@ubuntu:~/temp/HayStackDemo$ python manage.py rebuild_index -v2
    
    WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'.
    Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
    Are you sure you wish to continue? [y/N] y
    
    Removing all documents from your index because you said so.
    All documents removed.
    Skipping '<class 'django.contrib.auth.models.Permission'>' - no index.
    Skipping '<class 'django.contrib.auth.models.Group'>' - no index.
    Skipping '<class 'django.contrib.auth.models.User'>' - no index.
    Skipping '<class 'django.contrib.contenttypes.models.ContentType'>' - no index.
    Skipping '<class 'django.contrib.sessions.models.Session'>' - no index.
    Skipping '<class 'django.contrib.sites.models.Site'>' - no index.
    Skipping '<class 'django.contrib.admin.models.LogEntry'>' - no index.
    Indexing 0 notes
    

my search_indexes.py

    
    
    import datetime
    from haystack import indexes
    from demoApp.models import Note
    
    #------------------------------------------------------------------------------ 
    
    class NoteIndex(indexes.SearchIndex, indexes.Indexable):
    
        author = indexes.CharField(model_attr='user')
        pub_date = indexes.DateTimeField(model_attr='pub_date')
        text = indexes.CharField(document=True, use_template=True)
    
        def get_model(self):
            return Note
    
        def index_queryset(self, using=None):
            """Used when the entire index for model is updated."""
            return self.get_model().objects.filter(pub_date__gte=datetime.datetime.now())
    

I have also tried using this class and methods but nothing worked ..

    
    
    import datetime
    from haystack import indexes
    from demoApp.models import Note
    
    #------------------------------------------------------------------------------ 
    
    
    #All Fields
    class AllNoteIndex(indexes.ModelSearchIndex, indexes.Indexable):
         class Meta:
             model = Note
    

And this :

    
    
    import datetime
    from haystack import indexes
    from demoApp.models import Note
    
    #------------------------------------------------------------------------------ 
    
    class NoteIndex(indexes.SearchIndex, indexes.Indexable):
    
        author = indexes.CharField(model_attr='user')
        pub_date = indexes.DateTimeField(model_attr='pub_date')
        text = indexes.CharField(document=True, use_template=True)
    
        def get_model(self):
            return Note
    
    def load_all_queryset(self):
        # Pull all objects related to the Note in search results.
        return Note.objects.all().select_related()
    

But every time same issue. If i change the time zone setting in my project
settings file and try to update or rebuild index again i get this error ....

My DIR structure :

    
    
    vaibhav@ubuntu:~/temp/HayStackDemo$ tree
    .
    ├── demoApp
    │   ├── __init__.py
    │   ├── __init__.pyc
    │   ├── models.py
    │   ├── models.pyc
    │   ├── search_indexes.py
    │   ├── search_indexes.pyc
    │   ├── templates
    │   │   └── search
    │   │       ├── indexes
    │   │       │   └── demoApp
    │   │       │       └── note_text.txt 
    │   │       └── search.html
    │   ├── tests.py
    │   └── views.py
    ├── HayStackDemo
    │   ├── __init__.py
    │   ├── __init__.pyc
    │   ├── settings.py
    │   ├── settings.pyc
    │   ├── urls.py
    │   ├── urls.pyc
    │   ├── wsgi.py
    │   └── wsgi.pyc
    ├── manage.py
    └── sqlite.db
    

settings.py

    
    
    # Django settings for HayStackDemo project.
    
    DEBUG = True
    TEMPLATE_DEBUG = DEBUG
    
    ADMINS = (
        # ('Your Name', 'your_email@example.com'),
    )
    
    MANAGERS = ADMINS
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': '/home/vaibhav/temp/HayStackDemo/sqlite.db',                      # Or path to database file if using sqlite3.
            'USER': '',                      # Not used with sqlite3.
            'PASSWORD': '',                  # Not used with sqlite3.
            'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        }
    }
    
    # Hosts/domain names that are valid for this site; required if DEBUG is False
    # See https://docs.djangoproject.com/en/1.4/ref/settings/#allowed-hosts
    ALLOWED_HOSTS = []
    
    # Local time zone for this installation. Choices can be found here:
    # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
    # although not all choices may be available on all operating systems.
    # In a Windows environment this must be set to your system time zone.
    TIME_ZONE = 'America/Chicago'
    #'Asia/Kolkata'
    
    # Language code for this installation. All choices can be found here:
    # http://www.i18nguy.com/unicode/language-identifiers.html
    LANGUAGE_CODE = 'en-us'
    
    SITE_ID = 1
    
    # If you set this to False, Django will make some optimizations so as not
    # to load the internationalization machinery.
    USE_I18N = True
    
    # If you set this to False, Django will not format dates, numbers and
    # calendars according to the current locale.
    USE_L10N = True
    
    # If you set this to False, Django will not use timezone-aware datetimes.
    USE_TZ = True
    
    # Absolute filesystem path to the directory that will hold user-uploaded files.
    # Example: "/home/media/media.lawrence.com/media/"
    MEDIA_ROOT = ''
    
    # URL that handles the media served from MEDIA_ROOT. Make sure to use a
    # trailing slash.
    # Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
    MEDIA_URL = ''
    
    # Absolute path to the directory static files should be collected to.
    # Don't put anything in this directory yourself; store your static files
    # in apps' "static/" subdirectories and in STATICFILES_DIRS.
    # Example: "/home/media/media.lawrence.com/static/"
    STATIC_ROOT = ''
    
    # URL prefix for static files.
    # Example: "http://media.lawrence.com/static/"
    STATIC_URL = '/static/'
    
    # Additional locations of static files
    STATICFILES_DIRS = (
        # Put strings here, like "/home/html/static" or "C:/www/django/static".
        # Always use forward slashes, even on Windows.
        # Don't forget to use absolute paths, not relative paths.
    )
    
    # List of finder classes that know how to find static files in
    # various locations.
    STATICFILES_FINDERS = (
        'django.contrib.staticfiles.finders.FileSystemFinder',
        'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    #    'django.contrib.staticfiles.finders.DefaultStorageFinder',
    )
    
    # Make this unique, and don't share it with anybody.
    SECRET_KEY = 'kg5kd%92#5*ybo-$92ci$u349s$1*xhmhnq68!oue%r=^fq#yz'
    
    # List of callables that know how to import templates from various sources.
    TEMPLATE_LOADERS = (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    #     'django.template.loaders.eggs.Loader',
    )
    
    MIDDLEWARE_CLASSES = (
        'django.middleware.common.CommonMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        # Uncomment the next line for simple clickjacking protection:
        # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    )
    
    ROOT_URLCONF = 'HayStackDemo.urls'
    
    # Python dotted path to the WSGI application used by Django's runserver.
    WSGI_APPLICATION = 'HayStackDemo.wsgi.application'
    
    TEMPLATE_DIRS = (
        # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
        # Always use forward slashes, even on Windows.
        # Don't forget to use absolute paths, not relative paths.
    )
    
    INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'django.contrib.admin',    
        'haystack',
        'demoApp',
    )
    
    HAYSTACK_CONNECTIONS = {
        'default': {
            'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
            'URL': 'http://127.0.0.1:9200/',
            'INDEX_NAME': 'haystack',
        },
    }
    
    # A sample logging configuration. The only tangible logging
    # performed by this configuration is to send an email to
    # the site admins on every HTTP 500 error when DEBUG=False.
    # See http://docs.djangoproject.com/en/dev/topics/logging for
    # more details on how to customize your logging configuration.
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'filters': {
            'require_debug_false': {
                '()': 'django.utils.log.RequireDebugFalse'
            }
        },
        'handlers': {
            'mail_admins': {
                'level': 'ERROR',
                'filters': ['require_debug_false'],
                'class': 'django.utils.log.AdminEmailHandler'
            }
        },
        'loggers': {
            'django.request': {
                'handlers': ['mail_admins'],
                'level': 'ERROR',
                'propagate': True,
            },
        }
    }
    

Can some please help me...


Answer: 
    class PersonIndex(indexes.SearchIndex, indexes.Indexable):
        text = indexes.CharField(document=True, use_template=True, template_name="person_text.txt")
        name = indexes.CharField(model_attr='name')
    
        def get_model(self):
            return Person
    

Have to add the name of the template, otherwise it uses the default path.

    
    
    template_name="person_text.txt"
    

