使用Django + Celery更新Haystack搜索索引

时间:2010-12-05 12:28:28

标签: python django indexing celery django-haystack

在我的Django项目中,我正在使用Celery。我将来自crontab的命令切换为周期性任务,但它运行良好,但它只是在模型上调用方法。是否可以从周期性任务更新我的Haystack索引?有没有人这样做过?

/manage.py update_index

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

4 个答案:

答案 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

我发现这个软件包是一个很棒的,简单的插件应用程序,可以通过芹菜提供干草堆索引。我在一些项目中使用它。