从PHP调用sphinx索引器

时间:2013-12-11 17:42:55

标签: php mysql indexing sphinx

我有一个相当大的Web应用程序,可以在MySQL数据库中存储大量数据。我还有一个PHP脚本,可以处理这些数据。

因为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和实际上能够查询索引之间有延迟,但这没有帮助。

以前有人见过这样的事吗?

非常感谢

编辑:

好的,所以在我提交这个问题后,我有一个脑电波。似乎一旦第二次调用索引器,就需要重新创建sphinx客户端。

这导致与sphinx的新连接,然后似乎找到了数据。 我会接受任何可以解释原因的答案!

1 个答案:

答案 0 :(得分:0)

如果您将连接打开到searchd,则无法“重新启动”。这样做会破坏连接。

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

但是不知道为什么你从查询中得到“没有”,你应该得到旧的结果。