Sphinxsearch通过zf2db适配器定期抛出搜索rt索引的错误


Sphinxsearch periodically throws error searching an rt-index via zf2 db adapter

我遇到了一个相当复杂的搜索系统的间歇性问题。每隔一段时间,我编写的一个PHP守护程序就会抛出一个神秘的异常,它会向我们的数据库添加新内容,并为sphinx添加RT索引。

消息只是"语句无法执行"。

导致它被(修剪)的代码:

<?php
$itemIds = Array( 79555 );
$index = 'doc';
$adapter = $this->dbAdapter;
$qi = function($name) use ($adapter) { 
    return $adapter->platform->quoteIdentifier($name); 
};
$checkSql = '
    SELECT * FROM
        '. $qi( $index ) . '
    WHERE
        id  = ' . (int)$itemIds[0];
$checkStatement = $this->dbAdapter->query($checkSql);
$result = $checkStatement->execute();

异常似乎不会发生在任何特定的触发器上,但从第一次抛出到我重新启动守护进程时都会持续存在。我已经输出了Zend''DB''Adapter生成的sql和bar ID。由于不同,成功的查询和失败的查询似乎没有区别。

sphinx日志中没有相关的错误(我可以看到),如果我加载neutron/sphinxsearch-api/sphinxapi.php并运行GetLastError(),它将返回一个空白字符串。

我的想法是,这是一个连接错误,或者可能是斯芬克斯配置使其超时的错误配置,但我不确定。

这听起来像是在使用持久连接。有时连接可能会被删除,但您的代码没有考虑到这一点,并且仍在尝试使用已关闭的连接。也许可以尝试检查错误,如果得到错误,请重新连接。

简而言之,使代码对偶尔关闭的连接具有弹性。