2011-11-07 71 views
0

我下載django-haystack-1.1.0.tar.gz,解壓縮,然後haystack目錄,這是它,複製到我的apps目錄,並添加haystackINSTALLED_APPS(也添加嗖,因爲我太複製),但是當我重新啓動服務器時,我得到500內部錯誤。然後,我從haystack.__init__刪除,用於實驗,handle_registrations()和現場開始工作,但是當我通過草垛嘗試搜索我得到No fields were found in any search_indexes. Please correct this before attempting to search.在settings.py我也:Django的草垛 - 無模塊命名search_sites

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

然後我撤消刪除handle_registrations(),從INSTALLED_APPS和刪除草垛重新啓動服務器,現在我得到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

從它聽起來像你錯過了幾步你所列出的安裝步驟。

絕對重新訪問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'的免費文本搜索字段。當您搜索沒有指定字段的自由文本時,乾草堆將默認搜索此字段。來自型號MyModel的屬性my_field被添加到該文本字段中並且可以搜索。例如,這可以是模型的名稱或適當的文本字段。這個例子有點天真,但現在它會幫助你啓動和運行,然後你可以讀一些並擴展它。

呼叫site.register註冊該指數對模型MyModel,乾草堆可以發現它。

您還需要在項目目錄中有一個名爲search_sites.py(根據您的設置命名)的文件,以指向您剛創建的索引文件。添加以下內容將使其通過應用程序查看並自動發現您已註冊的任何索引。

import haystack 
haystack.autodiscover() 
+0

我有'search_indexes'文件,但它並沒有幫助。如果我錯過了某些東西,我會在乾草堆文檔中進行搜索。 – Cadilac

+0

您可以打開調試(DEBUG = True在settings.py中),並給我們提供您在500中獲得的具體錯誤,以及它發生的視圖的任何相關信息?另外,你在哪裏看到'沒有找到字段'的錯誤? –

+0

錯誤500在DEBUG = True,這對我來說很奇怪,但我編輯我的問題並添加我的回溯 – Cadilac

2

您需要根據UR設置在烏爾項目的根目錄創建search_sites.py。PY並添加

import haystack 
haystack.autodiscover() 

這將解決「命名search_sites無模塊」 錯誤 這是LatestDocs的Django的草垛配置