Ответ 1
Самый простой способ сделать это - это, вероятно, запустить команду управления непосредственно с python и запустить ее в своей задаче
from haystack.management.commands import update_index
update_index.Command().handle()
В моем проекте Django я использую Celery. Я переключил команду crontab на периодическую задачу, и она работает хорошо, но она просто вызывает метод на модели. Возможно ли обновить индекс Haystack из периодической задачи? Кто-нибудь сделал это?
/manage.py update_index
Это команда для обновления индекса из документации Haystack, но я не уверен, как вызвать это из задачи.
Самый простой способ сделать это - это, вероятно, запустить команду управления непосредственно с python и запустить ее в своей задаче
from haystack.management.commands import update_index
update_index.Command().handle()
Что касается версии 2.0.0 beta haystack, этот код должен работать:
from haystack.management.commands import update_index
update_index.Command().handle(using='default')
https://github.com/django-haystack/celery-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.