2013-12-11 34 views
0

我有一个相当大的web应用程序,它将大量数据存储在MySQL数据库中。我也有一个PHP脚本,对这些数据做了一些工作。从PHP调用sphinx索引器

因为php脚本的工作非常激烈,所以我在多个独立的服务器上运行它。 基本上,脚本以编程方式将随机数据块下载到它自己的MySql数据库中,调用sphinx索引器,然后使用sphinx来完成它的一些工作。

PHP脚本通过CLI运行并无限期地执行。

脚本将数据下载到本地数据库之后,它通过调用索引:

$response = exec("indexer results_combined --rotate"); 
echo PHP_EOL.$response; 

而且每次迭代的回应是:

rotating indices: successfully sent SIGHUP to searchd (pid=3631) 

我看到的问题是,第一迭代通过索引器运行,php使用sphinx来完成它的工作并产生结果。

但是第二次使用索引器报告运行正常,但任何使用php Sphinx API的调用都不会返回任何结果。

sphinx-> query()命令对于所有查询都不返回任何内容,而sphinx-> getLastError()不显示任何内容。

如果我重新启动脚本,它会再次运行。 我甚至试图在索引器调用后延迟,以防SIGHUP和实际能够查询索引之间存在延迟,但这没有帮助。

以前有没有人见过类似的东西?

非常感谢

编辑:

行,所以我提出这个问题后,我灵机一动。似乎一旦索引器被第二次调用,狮身人面像客户端需要被重新创建。

这会导致一个新的连接到狮身人面像似乎然后找到数据。 我会接受任何人的答案,可以解释为什么!

回答

0

如果你保持连接打开到searchd,它不能'重新启动'。这样做会破坏连接。

所以实际的'旋转'被延迟,直到没有连接打开。

但不知道为什么你从查询中得不到'什么',你应该只是得到旧的结果。