我有这个使用sphinxapi.php通过Zend使用的sphinx搜索引擎。它很棒。真的很棒。
然而,有一个问题:它随机失败。
// Prepare Sphinx search
$sphinxClient = new SphinxClient();
$sphinxClient->SetServer($ip, $port);
$sphinxClient->SetConnectTimeout( 10 );
$sphinxClient->SetMatchMode( SPH_MATCH_ANY );
$sphinxClient->SetLimits( $resultsPerPage * ($nPage - 1), $resultsPerPage );
$sphinxClient->SetArrayResult( true );
$query = array();
$query['lang'] = '@lang "lang' . $language . '"';
if (isset($params)) {
foreach ($params as $param) {
$query['tags'] = '@tags "' . $param . '"';
}
}
// Make the Sphinx search
$sphinxClient->SetMatchMode(SPH_MATCH_EXTENDED);
$sphinxResult = $sphinxClient->Query(implode(' ', $query), '*');
如此处所示,我搜索一种语言和一定数量的标签,最终内嵌到一个查询字符串中(而不是制作一个子查询的战斗载荷)。
所以,通常情况下,这就像一个魅力,但偶尔会发现狮身人面像在英语中找到2000个条目,比如1000条带有“图片”的条目(或者其他一些纯英文单词),但是ZERO命中这两个条目都适合结果,这纯属虚假。事实上,刷新页面的一切都恢复正常,就像800个真实结果一样。
我的问题是为什么要这样做以及如何让它停止?
有什么想法吗?
:编辑:添加了缩短的输出日志
[error] =>
[warning] =>
...
[total] => 0
[total_found] => 0
[time] => 0.000
[words] => Array (
[langen] => Array (
[docs] => 2700
[hits] => 2701 )
[picture] => Array (
[docs] => 829
[hits] => 1571 ) ) )
答案 0 :(得分:0)
您是否检查过sphinx客户端是否提供了可能描述失败的错误或警告消息?
if($sphinxResult === false) {
print "Query failed: " . $sphinxClient->GetLastError();
} else {
if($sphinxClient->GetLastWarning()) {
print "WARNING: " . $sphinxClient->GetLastWarning();
}
// process results
}
答案 1 :(得分:0)
此问题在原帖后几个月完全已解决。问题是伞形公司中的服务提供商错误地将错误的根值分配给sphinx命令。上面的问题实际上是在Sphinx 0.9.8上运行,并且显然是错误的。我的建议是,如果遇到类似的问题,请双击检查您用来索引和查询的版本。
感觉就像其中一次你的数学计算没有推出,因为你忘记了第一行的减号。感谢所有试图帮助这个和相关主题的人。