Sphinx的search.exe正确返回结果,但PHP API没有返回任何内容

时间:2012-10-07 14:19:28

标签: php api sphinx config

我最近为我的MySQL数据库安装了sphinx,并配置了配置文件&我在运行search.exe时得到了正确的结果,但是当我使用PHP API(以及它的CodeIgniter包装器)时。我仍然是零结果。现在我很确定我的PHP代码是正确的,因为它是基本的(获取密钥,运行mysql查询,并返回结果)。什么原因可能导致这样的问题?这是sphinx配置文件的searchd部分,我需要修改任何内容吗? :

searchd
{
# listen            = 9312
listen          = 9306:mysql41
port            = 3312
log         = C:/sphinx/log/searchd.log
query_log       = C:/sphinx/log/query.log
read_timeout        = 5
max_children        = 30
pid_file        = C:/sphinx/log/searchd.pid
max_matches     = 1000
seamless_rotate     = 1
preopen_indexes     = 1
unlink_old      = 1
workers         = threads # for RT to work
binlog_path     = C:/sphinx/data


}

这是我的search.php sphinx查询:

        $search_string=$this->input->post('q');
        $this->load->library('Sphinxclient');
        $this->sphinxclient->setMatchMode(SPH_MATCH_ANY);
        $this->sphinxclient->SetArrayResult(TRUE);
        $users_ids=$this->sphinxclient->Query('users_info',$search_string);

现在我不确定API或sphinx如何找到mysql目录并连接到它,但我正在阅读sphinx文档,在基本的api函数部分,它说函数SetServer的默认值为“localhost” “,和港口”9312“。这可能是问题,因为在我的配置文件中我有一个不同的端口,我已经注释掉了9312的监听?

这是我对users_info source和index的定义(虽然我怀疑这是问题,因为search.exe能够获得结果)。

source users_info
{
type                            = mysql

sql_host                        = localhost
sql_user                        = admin
sql_pass                        = admin
sql_db                          = users
sql_sock                        =  /var/run/mysqld/mysqld.sock
sql_port                        = 3306                  


sql_query                       = \
        SELECT id, fullname,username FROM users_info;



sql_query_info          = SELECT * FROM users WHERE id=$id
}

和索引:

index users_info
{
source          = users_info
path            = C:/sphinx/data/users_info
docinfo         = extern
charset_type        = utf-8
}

另外,还有一件事,在API中,我在API中的查询函数中翻转了参数,我已经解决了这个问题但是没有解决问题。

任何想法?

1 个答案:

答案 0 :(得分:1)

  

它表示SetServer函数的默认值为“localhost”,端口为“9312”。这可能是问题,因为在我的配置文件中我有一个不同的端口,我已经注释掉了9312的监听?

这肯定会引起问题。您需要服务器侦听客户端尝试连接的端口。他们需要是一样的。

就此而言,您是否还在运行searchd服务器守护程序?在Windows下通常将其安装为服务。

(并检查防火墙是否阻止访问searchd正在侦听的端口)