我最近为我的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中的查询函数中翻转了参数,我已经解决了这个问题但是没有解决问题。
任何想法?
答案 0 :(得分:1)
它表示SetServer函数的默认值为“localhost”,端口为“9312”。这可能是问题,因为在我的配置文件中我有一个不同的端口,我已经注释掉了9312的监听?
这肯定会引起问题。您需要服务器侦听客户端尝试连接的端口。他们需要是一样的。
就此而言,您是否还在运行searchd服务器守护程序?在Windows下通常将其安装为服务。
(并检查防火墙是否阻止访问searchd正在侦听的端口)