我刚设置django-sphinx,它工作得很漂亮。我现在能够搜索我的模型并获得惊人的结果。一个问题是我必须使用indexer命令手动构建索引。这意味着每次添加新内容时,我都必须手动命中命令行来重建搜索索引。这是不可接受的。
我可以创建一个自动运行索引器命令的cron作业,但这远非最佳。在cron再次运行之前,不会对新数据编制索引。此外,由于我的网站没有经常添加数据,因此索引器大多数时间都会不必要地运行。
如何设置它,以便只要在可搜索的django模型中添加或修改数据,Sphinx索引就会自动重建?
答案 0 :(得分:5)
构建搜索索引基本上有两种主要策略:
第一种策略具有接近实时的明显优势,但可能在性能方面存在巨大劣势。大多数具有内部索引器的数据库服务器都存在性能问题(或者缺少功能),例如,请参阅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)
上面的声音对我来说是对的,不过我会提到你可以从保存函数中为对象调用索引器。
它可能被称为很多,但它可以工作。只需像调用任何外部命令一样调用它。