如何正确重新索引Sphinx搜索服务器?

时间:2012-01-12 00:11:56

标签: php sphinx

我有一个使用Sphinx搜索服务器搜索MySQL数据库的网站。这是完美的工作,但问题是当新项目添加到数据库时。我的问题是何时是执行reindex的最佳时间以及如何正确执行。目前我正在做一个“索引器--all --rotate”,但这似乎不起作用。更新索引的唯一方法是停止sphinx然后执行索引--all然后重新启动服务。这在现场网站上显然不太理想。如果有人有任何关于如何正确执行此操作的信息,我将非常感激。

由于

2 个答案:

答案 0 :(得分:2)

如果我理解正确,则不需要重启。 -all选项告诉索引器更新每个索引。 -rotate旋转索引,即创建每个索引的临时副本,并在完成后替换旧索引。根据Sphinx手册rotating works as follows:“它创建了第二个索引,与第一个索引平行(在同一个地方,只是在文件名中包含.new)。一旦完成,索引器通过发送SIGHUP信号通知searchd,并且searchd将尝试重命名索引(将现有的重命名为.old并重命名.new以替换它们),然后从较新的文件开始提供。根据seamless_rotate的设置,可能会有一点延迟能够搜索更新的索引。“

无缝旋转和“中断”旋转之间存在差异。可以使用Sphinx配置文件中的seamless_rotate参数来控制类型。 Seamless rotates以轮换期间更高的峰值内存使用量为代价,但不会中断。

Sphinx版也很重要。在以前的版本a restart was required to update the index中,在最新版本中,似乎不再需要它。

答案 1 :(得分:0)

'--rotate'选项旋转索引,即创建每个索引的临时副本,并在完成后替换旧索引。它创建了第二个索引,与第一个索引平行(在同一个地方,只是在文件名中包含.new)。一旦完成,索引器通过发送SIGHUP信号通知searchd,searchd将从具有.new扩展的较新文件开始服务。如果.new文件已存在于系统中,则只需在使用'--rotate'选项后更新它们。

' - all'选项告诉索引器更新每个索引但不更新第二个索引器文件,扩展名为.new,使用'--rotate'选项创建