在我的Django項目中,我使用了芹菜。我從crontab切換一個命令是一個週期性任務,它運行良好,但它只是調用一個模型的方法。是否有可能從定期任務中更新Haystack索引?有沒有人做過這個?使用Django + Celery更新Haystack搜索索引
/manage.py update_index
這是從Haystack文檔更新索引的命令,但我不確定如何從任務調用該命令。
在我的Django項目中,我使用了芹菜。我從crontab切換一個命令是一個週期性任務,它運行良好,但它只是調用一個模型的方法。是否有可能從定期任務中更新Haystack索引?有沒有人做過這個?使用Django + Celery更新Haystack搜索索引
/manage.py update_index
這是從Haystack文檔更新索引的命令,但我不確定如何從任務調用該命令。
這樣做很可能是直接從蟒蛇運行管理命令,並在你的任務
from haystack.management.commands import update_index
update_index.Command().handle()
至於版本2.0.0測試版草垛運行它的最簡單的方法,該代碼應工作:
from haystack.management.commands import update_index
update_index.Command().handle(using='default')
https://github.com/django-haystack/celery-haystack
我發現這個包是一個偉大的,簡單的插件應用程序通過芹菜提供草垛索引。我在一些項目中使用它。
而且,因爲草堆的2版本,你可以調用從蟒蛇重建索引
from haystack.management.commands import update_index, rebuild_index
rebuild_index.Command().handle(interactive=False)
凡「互動」會阻止草堆問的問題,如果你真的想重建索引。這相當於--no-input命令行選項。
如果您使用xapian作爲FTS後端,請記住對索引進行多線程更新會導致DB寫入鎖定。因此,使用celery-haystack包的解決方案確實試圖將索引更新傳播到多個工作者(多線程),從而導致xapian鎖定。
管理命令最好只是一個公共API的簡單封裝,但遺憾的是,在這裏似乎並不是這樣; https://github.com/toastdriven/django-haystack/blob/master/haystack/management/commands/update_index.py – asksol 2010-12-05 12:47:52
作爲黑客你可以使用django.core.management.call_command(「update_index」),但我會而是複製+粘貼上面鏈接的代碼以獨立工作 – asksol 2010-12-05 12:49:04
@asksol,感謝您的回覆。爲什麼call_command被認爲是黑客?做這個複製粘貼整個命令似乎更簡單。 – knuckfubuck 2010-12-06 04:37:28