2009-10-31 125 views
2

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

我能有这样的自动运行一次索引命令,这样往往cron作业,但是,从最佳的远。直到cron再次运行,新数据才会被索引。另外,由于我的网站没有经常添加数据,因此索引器会在不必要的时间运行。

我如何设置它,以便每当数据被添加到或修改可搜索的Django模型狮身人面像索引会自动重建本身?

回答

5

主要有建立搜索索引的两个主要策略:

  1. 索引内部到数据库服务器,该服务器在运行的记录索引插入或删除。
  2. 索引外部到数据库中(这可能会或可能不会是一个RDMS这就是为什么我要抛弃这个词服务器),该指数定期。

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

第二种策略是不是实时的,但一般具有最好的性能,不幸的是这也意味着,因为它没有内置,它必须在外部莫名其妙调用。

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

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

0

以上的声音我的权利,但我会提到,你可以从该对象的保存功能调用索引。

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