如何在django-sphinx中自动重建Sphinx索引?
我刚刚设置了django-sphinx,效果非常好。现在我可以搜索我的模型,得到很棒的结果。不过有一个问题,就是我需要手动使用索引命令来构建索引。这意味着每次我添加新内容时,都得去命令行手动重建搜索索引。这实在是太麻烦了。
我可以设置一个定时任务,让它定期自动运行索引命令,但这并不是最好的办法。因为新数据在定时任务再次运行之前是不会被索引的。而且,索引命令大多数时候都是不必要的,因为我的网站并不经常添加数据。
我该怎么做才能让Sphinx索引在每次添加或修改可搜索的django模型数据时自动重建呢?
2 个回答
0
我觉得上面的说法是对的,不过我想提一下,你可以在你的保存函数里调用索引器。
虽然这样可能会被调用很多次,但也是可行的。你只需要像调用其他外部命令一样去调用它就行了。
5
建立搜索索引主要有两种策略:
- 一种是内部索引器,直接在数据库服务器里,当记录被插入或删除时,索引会实时更新。
- 另一种是外部索引器,它可能不一定是关系型数据库(所以我没有提到“服务器”这个词),它会定期更新索引。
第一种策略的好处是更新速度快,接近实时,但可能会导致性能问题。大多数带有内部索引器的数据库服务器在性能上会遇到困难(或者缺少某些功能),比如Jeff Atwood在他的博客中提到的SQL Server 2008的性能问题,关于为stackoverflow添加第二台服务器的文章。
第二种策略虽然更新速度没有那么快,但通常性能更好。不幸的是,由于它不是内置的,所以需要通过其他方式来调用。
对于Sphinx来说,你没有选择,因为它是一个外部索引器。你必须通过cron或其他调度机制来调用Sphinx索引器。
为了加快索引速度,可以经常从cron运行它。如果这样做导致性能问题,那么你需要实施一种实时更新策略,这涉及到非常频繁地将新记录索引到一个增量索引中,然后定期将增量索引合并到主索引中。这一过程是在Django之外进行的,因此不会影响到django-sphinx。