2016-07-19 62 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