Sphinx随机无法组合子查询

时间:2009-11-25 12:16:21

标签: php sphinx

我有这个使用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 ) ) )

2 个答案:

答案 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上运行,并且显然是错误的。我的建议是,如果遇到类似的问题,请双击检查您用来索引和查询的版本。

感觉就像其中一次你的数学计算没有推出,因为你忘记了第一行的减号。感谢所有试图帮助这个和相关主题的人。