如何在django-sphinx下自动重建Sphinx索引?

时间:2009-10-31 01:18:27

标签: python django search sphinx django-sphinx

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

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

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

2 个答案:

答案 0 :(得分:5)

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

  1. Indexer 内部到数据库服务器,在插入或删除记录时即时编制索引。
  2. 索引器外部到数据库(可能是也可能不是RDMS,这就是为什么我要离开word服务器),它会定期编制索引。
  3. 第一种策略具有接近实时的明显优势,但可能在性能方面存在巨大劣势。大多数具有内部索引器的数据库服务器都存在性能问题(或者缺少功能),例如,请参阅Jeff Atwood在其关于adding a second server for stackoverflow的博客文章中讨论SQL Server 2008中的性能问题。

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

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

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

答案 1 :(得分:0)

上面的声音对我来说是对的,不过我会提到你可以从保存函数中为对象调用索引器。

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