django-haystack - 没有名为search_sites的模块

时间:2011-11-07 17:14:43

标签: django-haystack

我下载django-haystack-1.1.0.tar.gz,解压缩,然后将其中的haystack目录复制到我的apps目录,并将haystack添加到我的INSTALLED_APPS (还添加嗖,因为我也复制它),但当我重新启动服务器时,我得到500内部错误。然后我从handle_registrations()删除实验haystack.__init__,网站开始工作,但当我尝试通过haystack搜索时,我得到No fields were found in any search_indexes. Please correct this before attempting to search.在settings.py中我还有:

HAYSTACK_SITECONF = 'search_sites'  
HAYSTACK_SEARCH_ENGINE = 'whoosh'  
HAYSTACK_WHOOSH_PATH = os.path.join(PROJECT_ROOT, 'mysite_search_sites')

然后我取消删除handle_registrations(),从INSTALLED_APPS删除haystack并重新启动服务器,现在我收到No module named search_sites
import haystackhaystack.__version__也有效,但haystack.management.commands没有 有人可以帮帮我吗?

修改
我的追溯:

/lib/python2.7/django/core/handlers/base.py in get_response
                        response = callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
/myproject/apps/djangobb_forum/util.py in wrapper
            output = function(request, *args, **kwargs)
 ...
▶ Local vars
/myproject/apps/djangobb_forum/util.py in wrapper
            result = func(request, *args, **kwargs)
 ...
▶ Local vars
/myproject/apps/djangobb_forum/views.py in search
                for post in posts:
 ...
▶ Local vars
/myproject/apps/haystack/query.py in _manual_iter
            if not self._fill_cache(current_position, current_position + ITERATOR_LOAD_PER_QUERY):
 ...
▶ Local vars
/myproject/apps/haystack/query.py in _fill_cache
        results = self.query.get_results()
 ...
▶ Local vars
/myproject/apps/haystack/backends/__init__.py in get_results
                self.run()
 ...
▶ Local vars
/myproject/apps/haystack/backends/__init__.py in run
        results = self.backend.search(final_query, **kwargs)
 ...
▶ Local vars
/myproject/apps/haystack/backends/__init__.py in wrapper
            return func(obj, query_string, *args, **kwargs)
 ...
▶ Local vars
/myproject/apps/haystack/backends/whoosh_backend.py in search
            self.setup()
 ...
▶ Local vars
/myproject/apps/haystack/backends/whoosh_backend.py in setup
        self.content_field_name, self.schema = self.build_schema(self.site.all_searchfields())
 ...
▶ Local vars
/myproject/apps/haystack/backends/whoosh_backend.py in build_schema
            raise SearchBackendError("No fields were found in any search_indexes. Please correct this before attempting to search.")
 ...
▶ Local vars

2 个答案:

答案 0 :(得分:2)

从您列出的安装步骤来看,听起来好像您错过了几个步骤。

明确重新审视Haystack setup instructions,特别注意查看“创建搜索网站”和“创建索引”部分。

您的好处和缺点似乎是缺少索引文件。 Haystack在首次包含时会从索引中注册一堆东西,这就解释了为什么你从haystack.__init__

收到错误的原因

将名为“search_indexes.py”的文件添加到您的应用程序目录中。此文件包含要为不同模型生成的索引的列表。一个简单的例子是:

from haystack.indexes import *
from haystack import site
from myapp.models import MyModel

class MyModelIndex(SearchIndex):
    text = CharField(document=True, use_template=True)

    def prepare(self, obj):
        self.prepared_data = super(MyModelIndex, self).prepare(obj)
        self.prepared_data['text'] = obj.my_field

site.register(MyModel, MyModelIndex)

这会在索引中添加一个名为“text”的自由文本搜索字段。当您搜索没有要指定的搜索字段的自由文本时,haystack将默认搜索此字段。模型my_field中的属性MyModel将添加到此文本字段中,并可进行搜索。例如,这可以是模型的名称或一些适当的文本字段。这个例子有点天真,但它现在可以帮助你开始运行,然后你可以读一下并扩展它。

调用site.register针对模型MyModel注册此索引,以便haystack可以发现它。

您还需要在项目目录中使用名为search_sites.py的文件(根据您的设置命名)指向您刚刚创建的索引文件。添加以下内容将使您查看应用程序并自动发现您已注册的任何索引。

import haystack
haystack.autodiscover()

答案 1 :(得分:2)

您需要根据ur settings.py在项目根目录目录中创建 search_sites.py 并添加

import haystack
haystack.autodiscover()

这将修复“没有名为search_sites的模块”错误 这是Django-Haystack配置的LatestDocs