我正在尝试使用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
答案 0 :(得分:6)
我打赌你的项目中也安装了Wagtail - 因为那是Backend doesn't require rebuild的来源。
问题是Wagtail定义了自己的update_index
管理命令,该命令与Haystack具有的rebuild_index
调用update_index
冲突。当您尝试重建索引时,将调用Wagtail命令而不是Haystack命令。
快速而肮脏的解决方案是确保haystack
在wagtail
中<{strong> INSTALLED_APPS
之后 - 其命令将最后加载并取代Wagtail的。
另外,您需要编写自己的管理命令来包装Haystack的rebuild_index
代码。