私の Django プロジェクトでは、Celery を使用しています。crontab からのコマンドを定期的なタスクに切り替えましたが、うまく機能しますが、モデルのメソッドを呼び出しているだけです。Haystack インデックスを定期的なタスクからも更新することはできますか? 誰かがこれをしましたか?
/manage.py update_index
これは、Haystack のドキュメントからインデックスを更新するコマンドですが、タスクからそれを呼び出す方法がわかりません。
私の Django プロジェクトでは、Celery を使用しています。crontab からのコマンドを定期的なタスクに切り替えましたが、うまく機能しますが、モデルのメソッドを呼び出しているだけです。Haystack インデックスを定期的なタスクからも更新することはできますか? 誰かがこれをしましたか?
/manage.py update_index
これは、Haystack のドキュメントからインデックスを更新するコマンドですが、タスクからそれを呼び出す方法がわかりません。
これを行う最も簡単な方法は、おそらく管理コマンドを python から直接実行し、タスクで実行することです。
from haystack.management.commands import update_index
update_index.Command().handle()
haystack のバージョン 2.0.0 ベータ版に関しては、次のコードが機能するはずです。
from haystack.management.commands import update_index
update_index.Command().handle(using='default')
また、haystack のバージョン 2 以降、次のように Python からインデックスの再構築を呼び出すことができます。
from haystack.management.commands import update_index, rebuild_index
rebuild_index.Command().handle(interactive=False)
「インタラクティブ」は、本当にインデックスを再構築したい場合、干し草の山が質問するのを防ぎます。これは、 --no-input コマンド ライン オプションと同等です。
xapian を FTS バックエンドとして使用する場合、インデックスへのマルチスレッド更新により DB 書き込みロックが発生することに注意してください。そのため、celery-haystack パッケージを使用したソリューションは、インデックスの更新を複数のワーカー (複数のスレッド) に分散しようとし、その結果、xapian でロックが発生します。
https://github.com/django-haystack/celery-haystack
このパッケージは、セロリを介してヘイスタックのインデックス作成を提供するための優れた簡単なプラグイン アプリであることがわかりました。いくつかのプロジェクトで使用しました。