Подтвердить что ты не робот

Обновление индекса поиска Haystack с помощью Django + Celery

В моем проекте Django я использую Celery. Я переключил команду crontab на периодическую задачу, и она работает хорошо, но она просто вызывает метод на модели. Возможно ли обновить индекс Haystack из периодической задачи? Кто-нибудь сделал это?

/manage.py update_index

Это команда для обновления индекса из документации Haystack, но я не уверен, как вызвать это из задачи.

4b9b3361

Ответ 1

Самый простой способ сделать это - это, вероятно, запустить команду управления непосредственно с python и запустить ее в своей задаче

from haystack.management.commands import update_index
update_index.Command().handle()

Ответ 2

Что касается версии 2.0.0 beta haystack, этот код должен работать:

from haystack.management.commands import update_index
update_index.Command().handle(using='default')

Ответ 3

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

Я считаю, что этот пакет является отличным и легким подключаемым модулем для индексирования сена в сельском хозяйстве. Я использовал его в нескольких проектах.

Ответ 4

Кроме того, поскольку версия 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.