Как обновить update_index для стога сена из внешнего скрипта? - PullRequest
2 голосов
/ 29 июня 2019

Я использую Django Haystack с бэкэндом ElasticSearch для своей страницы поиска. Я использую MongoDB в качестве базы данных.
На моей странице поиска все работало нормально .

ПРОБЛЕМА
Мое веб-приложение использует внешний скрипт для изменения поля в базе данных с помощью pymongo
В моей базе данных есть 2 поля (Файлы, Анализ).
Сторонний скрипт запускается и меняет поле анализа на True или False.

После запуска сценария, когда Я ищу имя файла , это , показывающее мне обновленный Анализ в результаты.

Но когда Я ищу поле анализа , (скажем, я ищу True / False) Это не перечисляет этот обновленный в настоящее время анализ , хотя он был обновлен.

Например

Поиск: имя файла
Результат: имя файла True

Поиск: True
Результат: Результатов не найдено

Работает только после того, как я обновлю_индекс

ЧТО Я ПОПЫТАЛ
Поэтому я понял, что мне нужно обновить update_index. Но я не знаю, как выполнить обновление из внешнего скрипта Python.
Я пытался запустить

os.system("python /myapp/manage.py update_index")

Я получаю ошибку

Unknown command: 'update_index'

Когда я проверил команду управления, доступную из внешнего скрипта, он не выводит список команд стога сена.

os.system("python /myapp/manage.py")
Available subcommands:

[auth]
    #Things under [auth]

[contenttypes]
    #Things under [contenttypes]

[django]
    #Things under [django]

[sessions]
    #Things under [sessions]

[staticfiles]
    #Things under [staticfiles]

Здесь не отображаются подкоманды haystack, в отличие от того, что я запускаю в терминале.

Если я запускаю на терминале

#other subcommands
[haystack]
    build_solr_schema
    clear_index
    haystack_info
    rebuild_index
    update_index

Так что я ожидаю результата
Поиск: True
Результаты: имя файла True

Как мне этого добиться?
Как мне обновить update_index из внешнего скрипта?
Любые другие идеи?

Ответы [ 2 ]

0 голосов
/ 21 июля 2019

Вы можете включить обновление в реальном времени, добавив его в settings.py:

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

Она будет аналогична команде ruinning update, автоматически запускается при любом обновлении в отображенных индексах.

Подробнее здесь:

http://django -haystack.readthedocs.io / ен / v2.4.1 / signal_processors.html # в режиме реального времени-realtimesignalprocessor

Там, где реиндексация может занять некоторое время, вы должны использовать очередь, чтобы предотвратить затруднение цикла запрос / ответ, здесь предлагаются возможные решения, такие как сельдерей:

http://django -haystack.readthedocs.io / о / v2.4.1 / other_apps.html # реф-другой-приложение

0 голосов
/ 29 июня 2019

Вот как вы выполняете команду управления из своего кода:

from django.core.management import call_command

call_command('update_index', *args, **options)  # args and opions are optional.

Подробнее в документации Django: https://docs.djangoproject.com/en/dev/ref/django-admin/#running-management-commands-from-your-code

...