当前位置: 首页 > 知识库问答 >
问题:

如何从外部脚本更新haystack的_索引?

胥英奕
2023-03-14

我正在使用Django Haystack和ElasticSearch后端作为我的搜索页面。我使用MongoDB作为我的数据库
在我的搜索页面中,一切正常。

问题
我的web应用程序使用外部脚本使用pymongo更改后端数据库中的字段
我的数据库有两个字段(文件、分析)
第三方脚本将运行并将分析字段更改为True或False。

运行脚本后,当我搜索文件名时,它会在结果中显示更新的Analysis。

但是当我搜索分析字段时,(比如我搜索True/False),它没有列出当前更新的分析,尽管它已经更新。

例如

搜索:filename
结果:filename True

Search: True
结果:未找到结果

只有在我update_index后它才有效

我所尝试的
所以我想我必须update_index。但是我不知道如何从外部python脚本更新。
我试着运行

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

我得到了错误

Unknown command: 'update_index'

当我检查外部脚本中可用的管理命令时,它没有列出haystack命令。

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

因此,我希望结果
Search:True
Results:filename-True

我如何实现这一点?
如何从外部脚本update_index?
任何其他想法?

共有3个答案

仲法
2023-03-14

最可能的情况是,您试图调用命令,而不是从django所在的虚拟环境。下面的答案是正确的。但如果您想按自己的方式调用command,则应运行以下操作:

os.system("/path/to/your/venv/bin/python /myapp/manage.py")
翟功
2023-03-14

通过将此项添加到设置中,可以启用实时更新。py:

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

它将与销毁update命令类似,如果映射索引中有任何更新,它将自动触发。

更多详情请点击这里:

http://django-haystack.readthedocs.io/en/v2.4.1/signal_processors.html#realtime-realtimesignalprocessor

如果重新索引可能需要一些时间,您应该使用队列来防止请求/响应周期受到阻碍,这里建议可能的解决方案,如芹菜:

http://django-haystack.readthedocs.io/en/v2.4.1/other_apps.html#ref-其他应用程序

岳嘉容
2023-03-14

以下是如何从代码中执行管理命令:

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-代码中的管理命令

 类似资料:
  • 问题内容: 我正在尝试学习JavaFX,并将swing应用程序转换为JavaFX。我想做的是使用JavaFX来显示程序的进度。 我以前在Swing中所做的是首先使用自定义JComponent创建一个JFrame。然后让我的主程序调用自定义JComponent的方法,该方法将更改JComponent和repaint()中的形状颜色。 下面给出了我想在JavaFX中实现的目标的想法: 我目前将此作为我

  • 问题内容: 我正在开发非OSGI应用程序,我需要更新骆驼路线中使用的某些属性的值(已加载BridgePropertyPlaceHolder)。所以我认为: 要使用酷炫的管理控制台Hawtio,以便使用JMX更新骆驼 创建一个将更新属性..的JMX MBean。 我成功创建了MBean操作并使用JMX对其进行了调用,但是我不知道如何更新依赖于这些属性的骆驼路线。 有没有一种方法可以从外部更新骆驼上下

  • 问题内容: 我的应用程序在$ rootScope中初始化一个对象图,如下所示: …然后使用该对象图中的数据(仅1向绑定),就像这样… 这项工作正常,但是如果我随后(在页面渲染完成之后)尝试更新$ rootScope并将原始对象替换为新对象,则将其忽略。我最初以为这是因为AngularJS保留了对原始对象的引用,即使我已经替换了它。 但是,如果将使用方的HTML包装在控制器中,则可以按预期的方式重复

  • 问题内容: 我有一个程序和一个脚本,希望将其合并到我的Web应用程序中。 我想使用它们来解析上传到我的网站的文件;处理过程可能需要几秒钟,因此我也避免阻止该应用程序。 我如何才能只接受文件,然后仅在控制器的子过程中运行程序和脚本? 问题答案: 参见child_process。这是一个使用的示例,它允许您在输出数据时写入stdin并从stderr / stdout中读取。如果您不需要写stdin并且

  • 我最近收到一项维护Drupal站点的任务,其中一项任务是为开发站点编写备份和导入脚本,这样它就可以每天接收实时数据转储。 我已经这样做了,但是我们需要将Solr细节恢复到dev Solr数据库。但是,我只知道如何使用UI工具手动执行此操作(例如。“https://WEBSITE.co.uk/admin/config/search/apachesolr/settings单击“编辑”并更改UI菜单中的

  • 问题内容: 我只需要更新,而不需要更新整个表单。我尝试使用,,,但没有人正在为我想。使用时,它正在检查不需要执行的验证。 我该如何实现? 问题答案: 首先,仅因为它根本不支持该属性,它的确不会与一起使用。也许您真的打算使用? 修复a身份后, 阅读完该答案后,您应该已经发现数据表在该特定的代码段中由标识。因此,应该采取以下所有措施: 请注意,直到PrimeFaces 3.3为止,在某些复杂的UI组合