【问题标题】:How do I automatically rebuild the Sphinx index under django-sphinx?如何在 django-sphinx 下自动重建 Sphinx 索引?
【发布时间】:2010-12-11 19:17:50
【问题描述】:

我刚刚设置了 django-sphinx,它运行良好。我现在可以搜索我的模型并获得惊人的结果。一个问题是我必须使用 indexer 命令手动构建索引。这意味着每次我添加新内容时,我都必须手动点击命令行来重建搜索索引。这是不可接受的。

我可以创建一个定期自动运行索引器命令的 cron 作业,但这远非最佳。在 cron 再次运行之前,不会索引新数据。此外,由于我的网站没有经常添加数据,因此索引器会在大多数情况下不必要地运行。

如何设置它,以便在可搜索的 django 模型中添加或修改数据时,Sphinx 索引会自动重建自身?

【问题讨论】:

    标签: python django search sphinx django-sphinx


    【解决方案1】:

    建立搜索索引基本上有两种主要策略:

    1. 索引器内部到数据库服务器,在插入或删除记录时动态索引。
    2. 索引器 external 到数据库(可能是也可能不是 RDMS,这就是我不使用 word 服务器的原因),它定期索引。

    第一种策略具有更接近实时的明显优势,但在性能上可能存在巨大劣势。大多数具有内部索引器的数据库服务器都存在性能问题(或者缺少功能),例如,请参阅 Jeff Atwood 在他关于 adding a second server for stackoverflow 的博客文章中讨论 SQL Server 2008 中的性能问题。

    第二种策略不是实时的,但通常具有最佳性能,不幸的是,这也意味着,因为它不是内置的,所以必须以某种方式在外部调用。

    显然你别无选择Sphinx,它是一个外部索引器。您必须从 cron 或其他一些调度机制调用 sphinx 索引器。

    要加快索引速度,只需经常从 cron 运行它。如果这会导致性能问题,那么您需要实现live-update strategy,这涉及非常频繁地将新记录索引到增量索引中,然后定期将增量索引合并到主索引中。这将在 Django 外部完成,因此它不会影响 django-sphinx 中的任何内容。

    【讨论】:

      【解决方案2】:

      以上内容对我来说是正确的,但我会提到您可以从对象的保存函数中调用索引器。

      它可能会被称为很多,但它可以工作。就像调用任何外部命令一样调用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多