我在Python 2.7下使用Whoosh 2.3.2,Haystack 2.0.0和Django 1.3。在Localhost上,它很棒。在生产中,它在我搜索时会爆炸。
这是完整的追溯:
File "/opt/Python2.7/lib/python2.7/site-packages/django/core/handlers/base.py", line 117, in get_response
response = middleware_method(request, e)
File "/opt/Python2.7/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/var/www/html/sites/django_projects/apps/haystack/views.py", line 50, in __call__
return self.create_response()
File "/var/www/html/sites/django_projects/apps/haystack/views.py", line 130, in create_response
(paginator, page) = self.build_page()
File "/var/www/html/sites/django_projects/apps/haystack/views.py", line 107, in build_page
self.results[start_offset:start_offset + self.results_per_page]
File "/var/www/html/sites/django_projects/apps/haystack/query.py", line 261, in __getitem__
self._fill_cache(start, bound)
File "/var/www/html/sites/django_projects/apps/haystack/query.py", line 159, in _fill_cache
results = self.query.get_results(**kwargs)
File "/var/www/html/sites/django_projects/apps/haystack/backends/__init__.py", line 478, in get_results
self.run(**kwargs)
File "/var/www/html/sites/django_projects/apps/haystack/backends/__init__.py", line 396, in run
results = self.backend.search(final_query, **search_kwargs)
File "/var/www/html/sites/django_projects/apps/haystack/backends/__init__.py", line 27, in wrapper
return func(obj, query_string, *args, **kwargs)
File "/var/www/html/sites/django_projects/apps/haystack/backends/whoosh_backend.py", line 346, in search
narrow_searcher = self.index.searcher()
File "/var/www/html/sites/django_projects/utils/whoosh/index.py", line 322, in searcher
return Searcher(self.reader(), fromindex=self, **kwargs)
File "/var/www/html/sites/django_projects/utils/whoosh/filedb/fileindex.py", line 335, in reader
info.generation, reuse=reuse)
File "/var/www/html/sites/django_projects/utils/whoosh/filedb/fileindex.py", line 322, in _reader
readers = [segreader(segment) for segment in segments]
File "/var/www/html/sites/django_projects/utils/whoosh/filedb/fileindex.py", line 311, in segreader
generation=generation)
File "/var/www/html/sites/django_projects/utils/whoosh/filedb/filereading.py", line 66, in __init__
if segment.compound:
AttributeError: 'Segment' object has no attribute 'compound'
这是我的search_index.py:
from haystack import indexes
from articles.models import Article
from django.conf import settings
import datetime
now = datetime.datetime.now()
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
return Article
def index_queryset(self):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(publication="Published", site=settings.SITE_ID, created__lte=now)
有谁熟悉这个或有任何建议吗?
答案 0 :(得分:0)
没关系。事实证明,必须将Haystack和Whoosh安装到站点包。将它们放在apps文件夹中会导致问题,特别是如果你有一个utils文件夹。