2

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

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

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

4

2 回答 2

5

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

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

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

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

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

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

于 2009-10-31T07:54:13.803 回答
0

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

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

于 2010-04-17T02:46:22.593 回答