一、第一步是安装编译工具,当然,如果你以前安装过编译工具请忽略此条;
命令: yum -y install make gcc g++ gcc - c++ libtool autoconf imake mysql-devel libxml-devel expat-devel
二、安装sphinx
切换到你想存放压缩文件的目录 (例如: cd /usr/local/src ),下载命令: wget http://sphinxsearch.com/files/sphinx-2.1.1-beta.tar.gz
解压 : tar zxvf sphinx-2.1.1-beta.tar.gz
检查当前系统是否满足要求: cd sphinx-2.1.1-beta
命令2: ./configure --prefix=/usr/local/sphinx
4.编译: make 编译安装: make install
5.备份配置文件: a.进入到配置文件所在目录: cd /usr/local/sphinx/etc
b.复制并命名: cp sphinx.canf.dist sphinx.conf
6.修改配置文件
a.导入sphinx准备的测试数据,包括test数据库和两张表(此时请确保mysql已启用): mysql -uroot -proot </usr/local/sphinx/etc/example.sql (-u -p 后面接上自己的mysql账户密码)
b.修改配置文件 vim /usr/local/sphinx/etc/sphinx.conf
vim编辑器搜索命令 /sql_host (依据自己服务器情况填写响应参数即可)
sql_query_pre = SET NAMES utf8 (去除#)
#exceptions = /data/exceptions.txt (加上#)
7.创建索引文件: cd /usr/local/sphinx/bin
.indexer -all
(若是实际项目使用,在生成索引之后,还需打开sphinx进程: /usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf )此处可能报进程已存在的错误:FATAL:failedto lock....(省略) 用命令ps -elgrep searched找到进程号,然后用 kill pid 杀掉进程即可;
8.测试sphinx全文检索功能(这里搜索this) ./search this 此处若执行无效先切入到sphinx目录下;
若是报错:index 'test1': search error: query too complex, not enough stack (thread_stack=1201361K or higher required).
请按上文的方式修改配置文件: #sql_query_info = SELECT * FROM documents WHERE id=$id (加#注释掉此条sql)
三、php的调用
确定好自己的sphinx是正常运行状态,并已通过 ./search 关键字 的测试;(此处是指在配置好实际项目要用的数据库及表而不是test数据库)
将sphinx解压的目录中将 sphinxapi.php 拷贝到自己的项目目录(命令参考:cp /usr/local/src/sphinx-2.1.1-beta/api/shpinxapi.php /var/www/html/sphinxapi.php);
实例化类及调用:(以下参数仅根据上述操作配置,一切详细参数以个人设置为主)
include_once 'sphinxapi.php';
$sc = new SphinxClient();//实例化类
$sc->SetServer("localhost",9312);//指定服务信息,
$sc->SetConnectTimeout(10);//设置连接的超时时间
$sc->SetMaxQueryTime(30);//设置最大的查询时间
$sc->SetArrayResult(true);//设置sphinx返回结果的类型
$sc->SetMatchMode(SPH_MATCH_ANY);//设置切词方式
$result = $sc->Query($keyword,"*");//查询索引文件,返回主键值,此处最好先打印所以数据,查看数组结构
四、本文操作及实际调用时可能遇见的问题及解决方法
WARNING:Attrubute count is 0:swutching to none docinfo
解决方法: 修改配置文件: sql_attr_uint = id (给此处配置添加非主键整型字段参数,改完记得重新生成索引值)
生成索引时可能报错: FATAL:failed to lock /usr/local/sphinx/var/data/test1.sql:Resource temporarily unavailable, will not index.Try--rotate option. 解决方法:该用另一命令生成: ./indexer -c/usr/local/sphinx/etc/sphinx.conf --all -rotate
ERROR:index'test1':NO fields in schema -will not index. 解决:此处很可能时配置文件中的sql出了问题,请留意,特别是sql_attr_xx这类的配置项;
类似 WARNING: attribute 'xxx' not found -IGNORING 解决:找到配置文件中'xxx'排查错误;
类似 FATAL:unknow workers = form value 解决:此处错误一般为参数未给定,检查配置相关参数即可
(关于参数配置可以参考:https://www.2cto.com/kf/201609/545916.html)
(天气比较寒冷,本文全手打,如有错误还望谅解并指正。注:版权所有,未经允许不得转载)