在我的Django项目中,我正在使用Celery。我将来自crontab的命令切换为周期性任务,但它运行良好,但它只是在模型上调用方法。是否可以从周期性任务更新我的Haystack索引?有没有人这样做过?
/manage.py update_index
这是从Haystack文档更新索引的命令,但我不确定如何从任务中调用它。
答案 0 :(得分:30)
最简单的方法可能是直接从python运行管理命令并在任务中运行
from haystack.management.commands import update_index
update_index.Command().handle()
答案 1 :(得分:12)
对于haystack的2.0.0版测试版,此代码应该有效:
from haystack.management.commands import update_index
update_index.Command().handle(using='default')
答案 2 :(得分:7)
此外,从haystack的第2版开始,您可以将python中的rebuild index称为
from haystack.management.commands import update_index, rebuild_index
rebuild_index.Command().handle(interactive=False)
“交互式”会阻止干草堆问你是否真的想要重建索引。这相当于--no-input命令行选项。
如果您使用xapian作为FTS后端,请记住索引的多线程更新将导致DB Write Lock。因此,使用celery-haystack包的解决方案会尝试将索引更新传播到多个worker(多个线程),从而导致使用xapian进行锁定。
答案 3 :(得分:6)
https://github.com/django-haystack/celery-haystack
我发现这个软件包是一个很棒的,简单的插件应用程序,可以通过芹菜提供干草堆索引。我在一些项目中使用它。