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

Django-Haystack + Whoosh - empty index after rebuild_index

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

All documents removed. Updating backend: default default: Backend doesn't require rebuild. Skipping

这是我的 SearchIndex Class:

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 及其在设置文件中的配置。 我的数据库是 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 文件的文件夹名称必须与您要索引的模型完全相同(索引中的位置无关紧要 Class你写的显然...)。

当然,感谢@solarissmoke

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

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

快速而肮脏的解决方案是确保 haystackwagtail 之后 INSTALLED_APPS 中出现 - 它的命令将最后加载并将取代 Wagtail 的。

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