2016-07-19 63 views
2

我正在嘗試使用Haystack和Whoosh在我的應用程序中進行索引和搜索。 當我重建索引時,我得到以下結果:Django-Haystack + whoosh - rebuild_index後的空索引

刪除了所有文檔。更新後端:默認默認:後端 不需要重建。跳繩

這是我SearchIndex類:

class BlogIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True, template_name="snip_text.txt") 
    headline = indexes.CharField(model_attr="headline", null=True) 
    body = indexes.CharField(model_attr="body") 


    def get_model(self): 
     return Snip 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.filter(date__lte=timezone.now()) 

這是我blog_text.txt文件(位於模板/搜索/索引/ MYAPP /):

{{ object.headline }} 
{{ object.body }} 

我加乾草堆到INSTALLED_APPS及其在配置文件中的配置。 我的數據庫是sqlite(僅用於開發...)。

我在做什麼錯?

謝謝!

[R

UPDATE

創建這樣的管理命令(如你所願命名文件 - e.g my_update_index.py)

from haystack.management.commands import update_index 

class Command(update_index.Command): 
    pass 

做的clear_index命令相同。

rebuild_index命令調用clear_index和update_index,因此,即使您創建新的重建命令,它也不起作用(因爲它正在查找錯誤的命令)。

當你想重建索引時,只需運行這兩個命令,否則運行你的update_index命令。

還有一點需要注意:模板txt文件的文件夾名稱必須與您嘗試索引的模型完全相同(並且這與您在明顯編寫的索引類中的位置無關。 )。

當然,信貸@solarissmoke

回答

4

我打賭你已經安裝鶺鴒在您的項目,以及 - 因爲這是在Backend doesn't require rebuild的來源。

問題是W defines定義了自己的update_index管理命令,它與Haystack的管理命令衝突(rebuild_index調用update_index)。當您嘗試重建索引時,將調用Wagtail命令而不是Haystack命令。

的快速和骯髒的解決方案是確保haystackwagtailINSTALLED_APPS - 它的命令將被載入最後將取代鶺鴒的。

替代方案,您需要編寫自己的管理命令來包裝Haystack的rebuild_index代碼。

+0

你是絕對正確的,但我嘗試過,但仍然沒有成功。也許我做錯了什麼......我用import和'class Command(rebuild_index.Command)創建了一個名爲blog_rebuild.py的文件:pass' – Rani

+0

您需要對'update_index'執行相同的操作 - 這由Haystack的'rebuild_index '。 – solarissmoke

+0

它的工作原理!我的blog_rebuild仍然不會執行任何操作,只能使用blog_update_index.py。可以嗎? – Rani