Обновление поискового индекса Haystack с помощью Django + Celery - PullRequest
29 голосов
/ 05 декабря 2010

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

/manage.py update_index

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

Ответы [ 4 ]

30 голосов
/ 07 декабря 2010

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

from haystack.management.commands import update_index
update_index.Command().handle()
12 голосов
/ 29 июня 2012

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

from haystack.management.commands import update_index
update_index.Command().handle(using='default')
7 голосов
/ 06 июля 2014

Кроме того, начиная со 2-й версии стога сена, вы можете вызывать пересбор индекса из python как

from haystack.management.commands import update_index, rebuild_index
rebuild_index.Command().handle(interactive=False)

Где " интерактивный " не позволит стогу сена задавать вопрос, если вы действительно хотите перестроить индекс. Это эквивалентно параметру командной строки --no-input.

Если вы используете xapian в качестве бэкэнда FTS, помните, что многопоточное обновление индекса приведет к блокировке записи в БД. Итак, решение с пакетом celery-haystack пытается распространить обновление индекса на несколько рабочих (несколько потоков), что приводит к блокировке с помощью xapian.

6 голосов
/ 29 августа 2012

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

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

...