Django-Haystack + Whoosh - rebuild_index之后的空索引

时间:2016-07-19 22:33:34

标签: django indexing django-haystack whoosh

我正在尝试使用Haystack和Whoosh在我的应用中进行索引和搜索。 当我重建索引时,我得到了这个结果:

  

删除所有文件。更新后端:默认默认值:后端   不需要重建。跳过

这是我的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文件(位于templates / search / indexes / myapp /中):

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

我在设置文件中将haystack添加到INSTALLED_APPS及其配置中。 我的DB是sqlite(仅用于开发......)。

我做错了什么?

谢谢!

[R

更新

创建这样的管理命令(根据需要命名文件 - 例如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

1 个答案:

答案 0 :(得分:6)

我打赌你的项目中也安装了Wagtail - 因为那是Backend doesn't require rebuild的来源。

问题是Wagtail定义了自己的update_index管理命令,该命令与Haystack具有的rebuild_index调用update_index冲突。当您尝试重建索引时,将调用Wagtail命令而不是Haystack命令。

快速而肮脏的解决方案是确保haystackwagtail中<{strong> INSTALLED_APPS之后 - 其命令将最后加载并取代Wagtail的。

另外,您需要编写自己的管理命令来包装Haystack的rebuild_index代码。