Search code examples
pythondjangoelasticsearchdjango-haystack

Keyerror u'_source' in django haystack with Elasticsearch backend


I am getting a Keyerror whenever I specify .values() with SearchQuerySet in django Haystack. For e.g.

required_output = SearchQuerySet()[:10]

works fine. But whenever, I do the following, its throwing KeyError everytime.

required_output = SearchQuerySet().values('title', 'slug')[:10]

Here's the Trackback of the error:

Traceback:

File "/home/project_env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/project_env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)
File "/home/project_env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  87.         return handler(request, *args, **kwargs)
File "/home/project_env/myproject/source/apps/Project/views.py" in get
  151.         context = self.get_context_data(object=self.object)
File "/home/project_env/myproject/source/apps/Project/views.py" in get_context_data
  108.         context['related_project'] = SearchQuerySet().values('title')[:10]
File "/home/project_env/local/lib/python2.7/site-packages/haystack/query.py" in __getitem__
  266.                 self._fill_cache(start, bound)
File "/home/project_env/local/lib/python2.7/site-packages/haystack/query.py" in _fill_cache
  656.         return super(ValuesListSearchQuerySet, self)._fill_cache(start, end, **kwargs)
File "/home/project_env/local/lib/python2.7/site-packages/haystack/query.py" in _fill_cache
  166.         results = self.query.get_results(**kwargs)
File "/home/project_env/local/lib/python2.7/site-packages/haystack/backends/__init__.py" in get_results
  645.                 self.run(**kwargs)
File "/home/project_env/local/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py" in run
  918.         results = self.backend.search(final_query, **search_kwargs)
File "/home/project_env/local/lib/python2.7/site-packages/haystack/backends/__init__.py" in wrapper
  35.             return func(obj, query_string, *args, **kwargs)
File "/home/project_env/local/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py" in search
  504.             distance_point=kwargs.get('distance_point'), geo_sort=geo_sort)
File "/home/project_env/local/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py" in _process_results
  580.             source = raw_result['_source']

Solution

  • What version of django-haystack are you using? It looks like there is an open issue for this on the django-haystack GitHub. There is also a patch that should fix it. Looks like you'll have to either wait for the merge, or patch it locally.

    Issue #1019

    Pull Request #1020