31

在我的 Django 项目中,我使用的是 Celery。我将 crontab 中的命令切换为定期任务,它运行良好,但它只是在模型上调用一个方法。是否也可以通过定期任务更新我的 Haystack 索引?有人做过吗?

/manage.py update_index

这是从 Haystack 文档更新索引的命令,但我不确定如何从任务中调用它。

4

4 回答 4

30

最简单的方法可能是直接从 python 运行管理命令并在您的任务中运行它

from haystack.management.commands import update_index
update_index.Command().handle()
于 2010-12-07T00:34:51.090 回答
12

至于 haystack 的 2.0.0 beta 版本,这段代码应该可以工作:

from haystack.management.commands import update_index
update_index.Command().handle(using='default')
于 2012-06-29T11:08:44.010 回答
7

此外,由于 haystack 的第 2 版,您可以从 python 调用重建索引作为

from haystack.management.commands import update_index, rebuild_index
rebuild_index.Command().handle(interactive=False)

如果您真的想重建索引,“交互式”会阻止 haystack 提问。这相当于 --no-input 命令行选项。

如果您使用 xapian 作为 FTS 后端,请记住多线程更新索引会导致 DB 写入锁定。因此,带有 celery-haystack 包的解决方案确实尝试将索引更新传播到多个工作人员(多线程)中,从而导致 xapian 锁定。

于 2014-07-06T07:54:26.030 回答
6

https://github.com/django-haystack/celery-haystack

我发现这个包是一个很棒的、简单的插件应用程序,可以通过 celery 提供 haystack 索引。我在几个项目中使用它。

于 2012-08-29T01:49:28.650 回答