1

我有这个 sphinx 搜索引擎,我通过 Zend 使用 sphinxapi.php 。它工作得很好。真的真的很棒。

但是,有一个问题:它随机失败。

    // 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 个带有标签“图片”(或其他纯英文单词)的条目,但符合这两个结果的零命中,这纯粹是假的。事实上,刷新页面一切都恢复正常,大约有 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 ) ) )
4

2 回答 2

0

您是否检查过 sphinx 客户端是否给您任何可能描述失败的错误或警告消息?

if($sphinxResult === false) {
    print "Query failed: " . $sphinxClient->GetLastError();
} else {
    if($sphinxClient->GetLastWarning()) {
        print "WARNING: " . $sphinxClient->GetLastWarning();
    }

    // process results
}
于 2009-11-25T15:50:19.833 回答
0

在原帖发布几个月后,此问题已完全解决。问题是我们在伞形公司的服务提供商错误地为 sphinx 命令分配了错误的根值。上面的问题实际上是在 Sphinx 0.9.8 上运行的,显然是有问题的。我的建议是,如果您遇到类似问题,请仔细检查您用于索引和查询的版本。

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

于 2011-04-18T12:50:01.407 回答