【问题标题】:Call sphinx indexer from PHP从 PHP 调用 sphinx 索引器
【发布时间】:2013-12-11 17:42:54
【问题描述】:

我有一个相当大的 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 的新连接似乎随后会找到数据。 我会接受任何可以解释原因的人的回答!

【问题讨论】:

    标签: php mysql indexing sphinx


    【解决方案1】:

    如果您保持对 searchd 的连接打开,它无法“重新启动”。这样做会破坏连接。

    所以实际的“旋转”会延迟,直到没有打开的连接。

    但不知道为什么您从查询中得到“无”,您应该只得到旧结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      相关资源
      最近更新 更多