3

我一直在尝试通过 PHP 使用 sphinx,但到目前为止我完全没有运气。

sphinx 本身按预期运行(我通过 linux 终端的搜索命令正在运行)

Engine_Api_SphinxClient 是安装包附带的 sphinx 的常规 php api。唯一的区别是类的命名。

    // Connect to sphinx server
    $sp = new \Engine_Api_SphinxClient();

    // Set the server
    $sp->SetServer('localhost', 9312);

    // SPH_MATCH_ALL will match all words in the search term
    $sp->SetMatchMode(SPH_MATCH_ANY);

    // We want an array with complete per match information including the document ids
    $sp->SetArrayResult(true);

    $sp->setFieldWeights(array(
        'thesis'=>2,
        'body'=>1
    ));

    /**
    * Run the search query. Here the first argument is the search term
    * and the second is the name of the index to search in.
    * Search term can come from a search form
    */
    $results = $sp->Query('gun', 'test1');
    debug($results);

该 setServer 中的 9312 是 sphinx 配置文件中定义的监听帖子。调试行给出“假”,我看到以下警告和注意事项:

Errors

Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 998
Warning: assert(): Assertion failed in /library/Engine/Api/SphinxClient.php on line 177
Warning: assert(): Assertion failed in /library/Engine/Api/SphinxClient.php on line 177
Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 1006
Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 1054
Warning: Invalid argument supplied for foreach() in /library/Engine/Api/SphinxClient.php on line 1070
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 564
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 569
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 477
Notice: Undefined property: Engine_Api_SphinxClient::$_socket in /library/Engine/Api/SphinxClient.php on line 478
Warning: fclose() expects parameter 1 to be resource, null given in /library/Engine/Api/SphinxClient.php on line 478

我怀疑它与那四个通知有关。如果有人可以提供有关问题所在的提示,将不胜感激。

4

1 回答 1

7

如果您重命名了类本身,您是否也更改了构造函数的名称(大约 430 行)?

我怀疑构造函数没有被调用,所以 _socket 没有被初始化(这发生在构造函数中)

(如果这是问题所在,您可能只需将函数重命名为 __construct() 以便它不依赖于调用的类 。http: //php.net/manual/en/language.oop5.decon.php

于 2012-08-14T11:25:52.547 回答