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

Ran*_*ani 3 django indexing whoosh django-haystack

我正在尝试使用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())
Run Code Online (Sandbox Code Playgroud)

这是我的blog_text.txt文件(位于templates/search/indexes/myapp /中):

{{ object.headline }}
{{ object.body }}
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

谢谢!

[R

UPDATE

创建一个这样的管理命令(根据需要命名文件 - 例如my_update_index.py)

from haystack.management.commands import update_index

class Command(update_index.Command):
    pass
Run Code Online (Sandbox Code Playgroud)

对clear_index命令执行相同操作.

rebuild_index命令调用clear_index和update_index,因此即使你将创建一个新的rebuild命令它也不会工作(因为它正在寻找错误的命令).

只需要在重建索引时运行这两个命令,否则运行update_index命令.

还有一点需要注意:模板txt文件的文件夹名称必须与您尝试索引的模型完全相同(并且在您编写的Index Class中的位置无关紧要......).

当然,归功于@solarissmoke

sol*_*oke 6

我打赌你的项目中也安装了Wagtail - 因为这就是Backend不需要重建的地方.

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

快速和肮脏的解决方案是,以确保haystack来自 wagtailINSTALLED_APPS-它的命令将在最后一次被加载,并将取代鹡鸰的.

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